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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

最新評(píng)論

永寿县| 新丰县| 保康县| 中阳县| 溧阳市| 林甸县| 姜堰市| 榆中县| 巴中市| 徐水县| 如东县| 河东区| 兴城市| 景谷| 高台县| 永康市| 焉耆| 嘉鱼县| 山东| 德庆县| 乌拉特前旗| 兴化市| 工布江达县| 崇仁县| 开阳县| 榆林市| 客服| 临泉县| 朝阳市| 阜阳市| 大丰市| 桃园市| 阿克陶县| 朝阳县| 西乡县| 甘泉县| 岳池县| 上犹县| 肥西县| 托克逊县| 临夏市|