Android關(guān)于SeekBar無法點擊到最大值問題解決方法記錄(推薦)
先說一下問題發(fā)現(xiàn)經(jīng)過吧,最近項目定制系統(tǒng)設(shè)置應(yīng)用,其中亮度條一開始是0-255值變化,使用了SeekBar控件去調(diào)節(jié),后來需求變更將值劃分為10個等級,也就是進度條的max為9,可以說一下子進度條從0-255變成了0-9范圍縮小了很多,范圍縮小,控件沒有變,也就是每個進度點到下一個進度點的距離就變長了,眾所周知,SeekBar是支持拖動以及點擊兩種方式控制,在我無聊瞎點時發(fā)現(xiàn),我怎么點,這個進度條都無法通過點擊跳到最大值,瞬間也就從劃水模式變成認真模式=_=||。順便也就寫下來記錄一下,防止以后忘記。
經(jīng)過分析,其實問題原因也大概是這樣的,SeekBar的進度大家都知道返回是一個int的整形,那么這個整形怎么取呢?這里也不細說各種判定,簡略說也就和我們平時計算一個線段平均分N段一樣,那么也就是每個進度點都有一段范圍長的,如上面我的范圍是0-9取值其實是10個數(shù),10個值所以我們進度條肯定是將線段長度分成9段[一條線段是有兩個端點,取n個值就劃分成n-1段],那么也相當于一個蛋糕只切了9份,那么最后肯定有一個數(shù)字分不到范圍,所以假設(shè)我們控件長度是90,分0-9,,那么其實取給0的范圍是[0,10)這么一個集合,以此類推1的范圍則是[10,20)...略,所以分到最后也就最大值9沒分到范圍,這里說的是范圍,因為點擊時,是看點擊范圍在哪里然后給他移動到代表那個范圍的點,那么9到底在哪里呢?其實9也算有范圍,咳咳,打臉自己,其實9的范圍就是[90],沒錯,最大值,你只能取最后滿足它100%的數(shù)。所以不是點不到,而是這個點太難點到了。唉--平時話少,也不知道解釋得到位不到位,若還是不懂,可以自己實際用一個SeekBar把控件長度定大一點,取值的max定小一點,然后自己體會一下吧= =!
那么為啥我們拖動可以到最大值呢?其實這個很好解釋,因為拖動時控件處理MOVE事件,大家應(yīng)該知道控件touch事件,你要抬起手這個焦點才會被釋放,所以我們一直拖,控件都會處理這個事件,而能到最大值原因是我們實際是拖到了或者超過最大值位置的點那么此時通過一系列計算判定也就跑到了最大值去了
說完原因,那么接下來就說一下解決方法吧,剛剛說了,最大值的判定范圍太小了,那么思路就是擴充最大值的判定范圍不就可以了么?
方法一:我們都知道控件除了本身實際長度外,其實還有很多額外的量,如android:layout_marginXXX, android:paddingXXX,但是margin并不會計算在控件內(nèi)部范圍,但是padding就不一樣,所以我們可以通過增加padding從而增加點擊范圍,從而使得最大值的判定范圍增大。如增加個android:paddingRight="20dp" 我目前用的是這種
方法二:原理同上,不過是通過setTouchDelegate方法去增大觸控范圍,具體這個方法使用方式和局限性大家可以自己百度[我就是這么懶=_=|]
方法三:還有一種方法那就是自己重新處理相關(guān)touch事件,修改范圍判定算法,把蛋糕重新切一下,如把8的判定改成是[80,85)那么剩下的就分給9之類的,這算是一個最好的解決方法,也是最麻煩的[所以我懶,也沒去做],僅提供思路。
以上所述是小編給大家介紹的Android關(guān)于SeekBar無法點擊到最大值問題解決方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android實現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法
這篇文章主要介紹了Android實現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法,涉及Android生成listview列表的相關(guān)技巧,需要的朋友可以參考下2015-12-12Android App開發(fā)中創(chuàng)建Fragment組件的教程
這篇文章主要介紹了Android App開發(fā)中創(chuàng)建Fragment的教程,Fragment是用以更靈活地構(gòu)建多屏幕界面的可UI組件,需要的朋友可以參考下2016-05-05Android自定義ViewGroup之FlowLayout(三)
這篇文章主要為大家詳細介紹了Android自定義ViewGroup之FlowLayout,常用于關(guān)鍵字標簽,搜索熱詞列表等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09Android編程使用AlarmManager設(shè)置鬧鐘的方法
這篇文章主要介紹了Android編程使用AlarmManager設(shè)置鬧鐘的方法,結(jié)合具體實例分析了Android基于AlarmManager實現(xiàn)鬧鐘功能的設(shè)置、取消、顯示等相關(guān)操作技巧,需要的朋友可以參考下2017-03-03