具有非常精细控制的Android SeekBar

标签 android android-progressbar

我想在我的 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/

相关文章:

Android list android :installLocation only work in 2. 2?

android - android :src vs app:srcCompat?之间还有什么区别吗

android - 如何通过代码在 RelativeLayout 中定位 Button?

android - 如何使用 ProgressDialog 在 android 中显示后台进度

android - ActionBar setProgressBarIndeterminateVisibility(false) 不适用于 android 2.3

android - 您如何清除确定的进度条以供重用?

Android 互联网连接检查失败

java - Android:Google Place Autocomplete API 给出“此 ip、站点或移动应用程序未被授权使用此 API key

android - 如何添加不确定的进度条

android - 更改 ProgressBar.Horizo​​ntal 不确定行为