【问题标题】:How to create a non-linear slider in Android?如何在 Android 中创建非线性滑块?
【发布时间】:2019-11-22 16:22:45
【问题描述】:

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

这只是非线性滑块有用的许多示例(this page details usability issues related to linear scales),但我在Material 或Flutter sliders 中找不到任何参考。很遗憾,因为它们已经有了离散的滑块;唯一缺少的部分是接受一个值列表,而不是单步增量,它就完成了!

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

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

【问题讨论】:

    标签: android user-interface flutter material-design


    【解决方案1】:

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

    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) 的滑块,然后通过二次动画曲线变换滑块的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多