android - 如何在 Android 中创建非线性 slider ?

标签 android user-interface flutter material-design

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

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

这是一个非线性 slider 的示例,它与我所寻找的(取自 UI Movement)有些相似:

Example of a non-linear slider

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

最佳答案

您可以通过拥有一个可能值的列表,然后使用 slider 索引列表中的元素来实现类似的功能。

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

关于android - 如何在 Android 中创建非线性 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57014776/

相关文章:

android - 升级到 Android Studio 2.2.2 后 Gradle 项目同步失败

c# - MVC 文本编辑器场景中模型的作用

python - Python Clutter 绑定(bind)简介?

flutter - 在 Flutter 中创建特定时间变量

flutter - 谷歌地图 dequeueBuffer : BufferQueue has been abandoned

android - Firebase.initializeApp();和 FirebaseMessaging.instance.getToken() 抛出 android native 异常

android - 找不到变量:在构建时 react

java - andEngine:为什么触摸事件不起作用?

android - 去除android上TabLayout下方的阴影

c++ - 强制 WM_NCHITTEST 返回 HTCAPTION,带有自定义游标..?