如何在Android中创建非线性滑块?

时间:2019-07-12 22:46:59

标签: android user-interface flutter material-design

我想添加一个滑块来定义地图中的搜索半径。当半径较小时,每个米都会计数,因此滑块应允许进行细粒度的更改。当半径变大时,例如5公里和6公里之间的差异很小,因此无需花费很多像素进行精细控制。

这只是非线性滑块有用的许多示例(this page details usability issues related to linear scales),但是我在MaterialFlutter sliders中找不到任何引用。可惜的是,因为它们已经有离散的滑块了;唯一缺少的部分是接受值列表而不是一步一步地完成,

这是一个非线性滑块的示例,它与我所寻求的模糊地相似(取自UI Movement):

Example of a non-linear slider

我错过了什么吗?有没有一种方法可以在Android / Flutter中快速实现此功能,还是需要为此制作一个完全自定义的组件?

1 个答案:

答案 0 :(得分:0)

您可以通过列出可能的值,然后使用滑块为列表中的元素索引来实现类似的功能。

class ListSlider extends State{

  List<String> items = ['one','two','four','eight'];
  int selectedIndex = 0;

  setSelected(int value) {
    setState(() {
      selectedIndex = value;
    });
  }

  Widget build(BuildContext context) {
    return Column(
      children: [
        Text(items[selectedIndex]),
        Slider(
          min: 0,
          max: items.length -1,
          divisions: items.length -1
          onChanged: (double value) => setSelected(value.round())
        )
      ]
    );
  }
}

另一种可能对数字特别有趣的方法是,使用范围为(0.0,1.0)的滑块,然后通过二次动画曲线变换滑块的输出。