我想在我的Android应用程序中设置一个滑动条,但控制非常精细。我有以下代码来定义条形及其范围:
skBar = new SeekBar (this);
skBar.setBackgroundColor (TRANS_BLUE);
skBar.setMax (2000);
skBar.setMinimumHeight (20);
skBar.setProgress (origOffset);
我正在以编程方式设置栏,因为我需要应用程序在用户调整时继续工作,但我真的不认为这是问题所在。问题是滑块似乎以至少10的增量移动。显然,我很可能碰到硬件的限制(我使用的是Nexus 7),但我不确定。我需要添加一些东西来解决细粒度吗?
答案 0 :(得分:1)
我可以看到造成这个问题的两件事之一。
如果SeekBar
宽度与max
值的关系过小。例如,如果您的搜索栏只有500像素宽,并且最大值为2000,则您可以获得的绝对最小值更改为2000 / 500 = 4
。这是一个1像素的运动。但是,由于以下原因,你可能无法获得一个像素的运动。
即使有一个大型的SeekBar,你也会遇到触控问题。为防止系统发生触摸事件,有一个阈值。如果运动太小,系统会将其丢弃。这个值因设备不同而有所不同,所以我无法告诉你它在Nexus 7上是什么。我个人认为它的值小到4,大到12。
要弄清楚你的触摸倾斜是什么,你可以使用ViewConfiguration#getScaledTouchSlop(),你可以在this fine answer中阅读更多关于它的信息。
因此,假设平均触摸斜率为8,即使是相当大的1200像素的SeekBar(原始最大值为2000),您应该得到最小值更改:(2000 / 1200) * 8 = 13.333...
。
您无法解决触摸问题,但如果您愿意向搜索栏添加前进/下一个控件,则可以使用您想要的任何增量自行更新进度。这对于精细控制是有利的,而触摸运动则是粗糙的。