最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android關(guān)于SeekBar無法點(diǎn)擊到最大值問題解決方法記錄(推薦)

 更新時(shí)間:2019年04月12日 14:10:32   作者:赤色荊棘  
這篇文章主要介紹了Android關(guān)于SeekBar無法點(diǎn)擊到最大值問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

先說一下問題發(fā)現(xiàn)經(jīng)過吧,最近項(xiàng)目定制系統(tǒng)設(shè)置應(yīng)用,其中亮度條一開始是0-255值變化,使用了SeekBar控件去調(diào)節(jié),后來需求變更將值劃分為10個(gè)等級,也就是進(jìn)度條的max為9,可以說一下子進(jìn)度條從0-255變成了0-9范圍縮小了很多,范圍縮小,控件沒有變,也就是每個(gè)進(jìn)度點(diǎn)到下一個(gè)進(jìn)度點(diǎn)的距離就變長了,眾所周知,SeekBar是支持拖動(dòng)以及點(diǎn)擊兩種方式控制,在我無聊瞎點(diǎn)時(shí)發(fā)現(xiàn),我怎么點(diǎn),這個(gè)進(jìn)度條都無法通過點(diǎn)擊跳到最大值,瞬間也就從劃水模式變成認(rèn)真模式=_=||。順便也就寫下來記錄一下,防止以后忘記。

經(jīng)過分析,其實(shí)問題原因也大概是這樣的,SeekBar的進(jìn)度大家都知道返回是一個(gè)int的整形,那么這個(gè)整形怎么取呢?這里也不細(xì)說各種判定,簡略說也就和我們平時(shí)計(jì)算一個(gè)線段平均分N段一樣,那么也就是每個(gè)進(jìn)度點(diǎn)都有一段范圍長的,如上面我的范圍是0-9取值其實(shí)是10個(gè)數(shù),10個(gè)值所以我們進(jìn)度條肯定是將線段長度分成9段[一條線段是有兩個(gè)端點(diǎn),取n個(gè)值就劃分成n-1段],那么也相當(dāng)于一個(gè)蛋糕只切了9份,那么最后肯定有一個(gè)數(shù)字分不到范圍,所以假設(shè)我們控件長度是90,分0-9,,那么其實(shí)取給0的范圍是[0,10)這么一個(gè)集合,以此類推1的范圍則是[10,20)...略,所以分到最后也就最大值9沒分到范圍,這里說的是范圍,因?yàn)辄c(diǎn)擊時(shí),是看點(diǎn)擊范圍在哪里然后給他移動(dòng)到代表那個(gè)范圍的點(diǎn),那么9到底在哪里呢?其實(shí)9也算有范圍,咳咳,打臉自己,其實(shí)9的范圍就是[90],沒錯(cuò),最大值,你只能取最后滿足它100%的數(shù)。所以不是點(diǎn)不到,而是這個(gè)點(diǎn)太難點(diǎn)到了。唉--平時(shí)話少,也不知道解釋得到位不到位,若還是不懂,可以自己實(shí)際用一個(gè)SeekBar把控件長度定大一點(diǎn),取值的max定小一點(diǎn),然后自己體會一下吧= =!

那么為啥我們拖動(dòng)可以到最大值呢?其實(shí)這個(gè)很好解釋,因?yàn)橥蟿?dòng)時(shí)控件處理MOVE事件,大家應(yīng)該知道控件touch事件,你要抬起手這個(gè)焦點(diǎn)才會被釋放,所以我們一直拖,控件都會處理這個(gè)事件,而能到最大值原因是我們實(shí)際是拖到了或者超過最大值位置的點(diǎn)那么此時(shí)通過一系列計(jì)算判定也就跑到了最大值去了

說完原因,那么接下來就說一下解決方法吧,剛剛說了,最大值的判定范圍太小了,那么思路就是擴(kuò)充最大值的判定范圍不就可以了么?

方法一:我們都知道控件除了本身實(shí)際長度外,其實(shí)還有很多額外的量,如android:layout_marginXXX, android:paddingXXX,但是margin并不會計(jì)算在控件內(nèi)部范圍,但是padding就不一樣,所以我們可以通過增加padding從而增加點(diǎn)擊范圍,從而使得最大值的判定范圍增大。如增加個(gè)android:paddingRight="20dp" 我目前用的是這種

方法二:原理同上,不過是通過setTouchDelegate方法去增大觸控范圍,具體這個(gè)方法使用方式和局限性大家可以自己百度[我就是這么懶=_=|]

方法三:還有一種方法那就是自己重新處理相關(guān)touch事件,修改范圍判定算法,把蛋糕重新切一下,如把8的判定改成是[80,85)那么剩下的就分給9之類的,這算是一個(gè)最好的解決方法,也是最麻煩的[所以我懶,也沒去做],僅提供思路。

以上所述是小編給大家介紹的Android關(guān)于SeekBar無法點(diǎn)擊到最大值問題解決方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評論

乌鲁木齐县| 通许县| 屯昌县| 宁夏| 沙湾县| 阳曲县| 巴彦淖尔市| 江安县| 汉阴县| 青川县| 凤阳县| 宁夏| 勃利县| 正蓝旗| 都兰县| 新泰市| 滕州市| 工布江达县| 长治市| 株洲县| 黄骅市| 郑州市| 湄潭县| 桦南县| 台江县| 张北县| 双流县| 花莲县| 扎鲁特旗| 电白县| 历史| 霍邱县| 元阳县| 靖州| 绍兴市| 民乐县| 沁源县| 丰镇市| 邢台县| 西吉县| 滦平县|