2013-07-26 26 views
1

我想在我的Android應用程序中設置滑動條,但控制非常精細。我有以下代碼來定義欄及範圍:Android SeekBar具有非常好的控制

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

我設置酒吧了編程,因爲我需要的應用程序繼續當用戶調整它的工作,但我真的不認爲這是問題。問題在於滑塊似乎至少以10爲增量移動。顯然,我可能會碰到硬件限制(我正在使用Nexus 7),但我不確定這一點。有什麼我需要添加解決罰款粒度?

回答

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


有沒有什麼可以做,以解決觸摸問題,但如果你願意/下一個控件添加着您的搜索條,你可以簡單地更新自己使用任何你想要增加的進展。這對於精細控制是很好的,而觸摸運動則是粗略的。

+0

我很確定這就是我所看到的。儘管這個應用程序特定於Nexus 7(橫向方向上有大約1000個水平像素),但看起來我只是要求比硬件更高的要求。感謝您對問題的額外關注。 – Rich