Android SeekBar具有非常精细的控制

时间:2013-07-26 21:36:45

标签: android android-progressbar

我想在我的Android应用程序中设置一个滑动条,但控制非常精细。我有以下代码来定义条形及其范围:

skBar = new SeekBar (this);
skBar.setBackgroundColor (TRANS_BLUE);
skBar.setMax (2000);
skBar.setMinimumHeight (20);
skBar.setProgress (origOffset);

我正在以编程方式设置栏,因为我需要应用程序在用户调整时继续工作,但我真的不认为这是问题所在。问题是滑块似乎以至少10的增量移动。显然,我很可能碰到硬件的限制(我使用的是Nexus 7),但我不确定。我需要添加一些东西来解决细粒度吗?

1 个答案:

答案 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...


您无法解决触摸问题,但如果您愿意向搜索栏添加前进/下一个控件,则可以使用您想要的任何增量自行更新进度。这对于精细控制是有利的,而触摸运动则是粗糙的。​​