1

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

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

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

4

1 回答 1

1

我可以看到导致此问题的两件事之一。

  • 如果您的宽度与您的价值SeekBar相比太小。max例如,如果您的搜索栏只有 500 像素宽,最大值为 2000,那么您可以获得的绝对最小值变化为2000 / 500 = 4. 这是一个 1 像素的移动。但是,由于以下原因,您可能无法获得一个像素的移动。

  • 即使使用大的 SeekBar,您也会遇到触摸倾斜问题。为了防止触摸事件淹没系统,有一个阈值。如果移动太小,系统会简单地将其丢弃。这个值因设备而异,所以我不能告诉你它在 Nexus 7 上是什么。我个人看到的值小到 4,大到 12。

要弄清楚你的触摸倾斜是什么,你可以使用ViewConfiguration#getScaledTouchSlop(),你可以在这个很好的答案中阅读更多关于它的信息。

因此,假设平均触摸斜率为 8,即使使用 1200 像素的相当大的 SeekBar(以及您的原始最大值为 2000),您应该得到的最小值变化为:(2000 / 1200) * 8 = 13.333...


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

于 2013-07-26T22:12:35.013 回答