【问题标题】:Android SeekBar with very fine control具有非常精细控制的 Android SeekBar
【发布时间】:2013-07-27 07:39:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-progressbar


    【解决方案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...


    您无法解决触摸问题,但如果您愿意为搜索栏添加前进/下一个控件,您可以使用所需的任何增量自行更新进度。这有利于精细控制,而触摸移动则适用于粗略。

    【讨论】:

    • 我很确定这就是我所看到的。尽管这个应用程序是特定于 Nexus 7 的(横向方向大约有 1000 个水平像素),但看起来我只是要求比硬件所能提供的更多。感谢您对这个问题的额外关注。
    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多