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

如何在Android中创建非线性滑块?,android,user-interface,flutter,material-design,Android,User Interface,Flutter,Material Design,我想添加一个滑块来定义地图中的搜索半径。当半径较小时,每米计数,因此滑块应允许细粒度的更改。当半径变大时,5公里和6公里之间的差异最小,因此无需花费大量像素进行细粒度控制 这只是一个例子,其中非线性滑块非常有用(),但我在或中找不到任何引用。这是一个遗憾,因为他们已经有离散滑块;唯一缺少的部分是接受一个值列表,而不是一个单步增量,这样就完成了 下面是一个非线性滑块的示例,它与我所寻找的(取自)大致相似: 我错过什么了吗?有没有办法在Android/Flatter中快速实现这一点,或者我需要为此

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

这只是一个例子,其中非线性滑块非常有用(),但我在或中找不到任何引用。这是一个遗憾,因为他们已经有离散滑块;唯一缺少的部分是接受一个值列表,而不是一个单步增量,这样就完成了

下面是一个非线性滑块的示例,它与我所寻找的(取自)大致相似:


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

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

类ListSlider扩展状态{
列表项=['1'、'2'、'4'、'8'];
int selectedIndex=0;
setSelected(整数值){
设置状态(){
selectedIndex=值;
});
}
小部件构建(构建上下文){
返回列(
儿童:[
文本(项目[selectedIndex]),
滑块(
分:0,,
最大值:items.length-1,
分区:项目长度-1
onChanged:(双值)=>setSelected(value.round())
)
]
);
}
}

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

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

类ListSlider扩展状态{
列表项=['1'、'2'、'4'、'8'];
int selectedIndex=0;
setSelected(整数值){
设置状态(){
selectedIndex=值;
});
}
小部件构建(构建上下文){
返回列(
儿童:[
文本(项目[selectedIndex]),
滑块(
分:0,,
最大值:items.length-1,
分区:项目长度-1
onChanged:(双值)=>setSelected(value.round())
)
]
);
}
}
对于数字来说,另一种可能特别有趣的方法是使用范围为(0.0,1.0)的滑块,然后通过二次动画曲线变换滑块的输出