我想在我的 Android 应用程序中设置一个 slider ,但要有很好的控制。我有以下代码来定义 bar 及其范围:
skBar = new SeekBar (this);
skBar.setBackgroundColor (TRANS_BLUE);
skBar.setMax (2000);
skBar.setMinimumHeight (20);
skBar.setProgress (origOffset);
我正在以编程方式设置栏,因为我需要应用程序在用户调整它时继续工作,但我真的不认为这是问题所在。问题是 slider 似乎以至少 10 的增量移动。显然,我很可能会遇到硬件限制(我使用的是 Nexus 7),但我不确定。是否需要添加一些内容来解决细粒度问题?
最佳答案
我可以看到导致此问题的两个原因之一。
如果您的
SeekBar
宽度相对于您的max
值太小。例如,如果您的搜索栏只有 500 像素宽,最大值为 2000,则您可以获得的绝对最小值变化为2000/500 = 4
。这是一个 1 像素的移动。但是,由于以下原因,您可能无法获得一个像素的移动。即使使用大型 SeekBar,您也会遇到触摸溢出问题。为了防止系统被触摸事件淹没,有一个阈值。如果 Action 太小,系统会直接将其丢弃。此值因设备而异,因此我无法告诉您它在 Nexus 7 上是什么。我个人见过小至 4 大至 12 的值。
要弄清楚你的触摸斜率是多少,你可以使用 ViewConfiguration#getScaledTouchSlop() ,您可以在 this fine answer 中阅读更多相关信息。 .
因此,假设平均触摸倾斜度为 8,即使有 1200 像素的相当大的 SeekBar(以及您的原始最大值 2000),您应该得到最小值变化:(2000/1200) * 8 = 13.333...
。
要解决触摸问题,您无能为力,但如果您愿意向搜索栏添加前进/下一个控件,您可以使用所需的任何增量自行更新进度。这有利于精细控制,而触摸运动则适合粗略。
关于具有非常精细控制的Android SeekBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891438/