Android自定義評(píng)分控件的完整實(shí)例
前言
無(wú)意中翻到幾年前寫過(guò)的一個(gè)RatingBar,可以拖拽,支持自定義星星圖片,間距大小等參數(shù)。
自定義參數(shù)
為了方便擴(kuò)展,支持更多的樣式,這里將大部分參數(shù)設(shè)置成支持外部可配置的形式。
<declare-styleable name="RatingBarPlus"> <attr name="hideImageResource" format="reference"/> <attr name="showImageResource" format="reference"/> <attr name="starSpace" format="dimension"/> <attr name="maxStar" format="integer"/> <attr name="stepSize" format="float"/> <attr name="rating" format="float"/> <attr name="starWidth" format="dimension"/> <attr name="starHeight" format="dimension"/> </declare-styleable>
- hideImageResource 暗星星圖片id
- showImageResource 亮星星圖片id
- starSpace 星星間距
- maxStar 星星最大個(gè)數(shù)
- stepSize 評(píng)分步長(zhǎng),即能不能選中0.1個(gè)星
- rating 默認(rèn)評(píng)分
- starWidth 星星寬度
- starHeight 星星高度
解析參數(shù)
創(chuàng)建星星位圖的時(shí)候需要根據(jù)配置的大小和圖片本身的寬高進(jìn)行縮放。
繪制
繪制完成之后我們就可以動(dòng)態(tài)設(shè)置評(píng)分來(lái)回顯之前的評(píng)分,但是經(jīng)常我們需要與控件交互,動(dòng)態(tài)地設(shè)置分?jǐn)?shù),所以我們還需要重寫onTouchEvent
方法完成事件處理。
事件處理
評(píng)分需要隨著手指的移動(dòng)而動(dòng)態(tài)變化,這里我們記錄下當(dāng)前手指所在的位置,如果在星星上面,就算出當(dāng)前位置距離星星左邊的長(zhǎng)度占據(jù)整個(gè)星星寬度的百分比,然后根據(jù)設(shè)置的stepSize
參數(shù)動(dòng)態(tài)微調(diào)總評(píng)分。
評(píng)分監(jiān)聽
我們還需要將評(píng)分暴露給外部,處理主動(dòng)調(diào)用getRating()方法獲取之外,我們還可以提供一個(gè)監(jiān)聽接口,實(shí)時(shí)提供回調(diào)。
功能事件比較簡(jiǎn)單,只需要在事件處理的時(shí)候,微調(diào)總評(píng)分完成之后回調(diào)一下數(shù)據(jù)就可以了。
if (onRatingChangeListener != null) { onRatingChangeListener.onRatingChange(rating); }
外部使用
ratingBar.setOnRatingChangeListener{ ratingText.text = "當(dāng)前評(píng)分:${it}" }
總結(jié)
到此這篇關(guān)于Android自定義評(píng)分控件的文章就介紹到這了,更多相關(guān)Android自定義評(píng)分控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android控件之RatingBar自定義星級(jí)評(píng)分樣式
- Android星級(jí)評(píng)分條控件RatingBar使用詳解
- Android評(píng)分控件RatingBar使用實(shí)例解析
- Android開發(fā)之拖動(dòng)條/滑動(dòng)條控件、星級(jí)評(píng)分控件功能的實(shí)例代碼
- Android RatingBar星星評(píng)分控件實(shí)例代碼
- Android自定義星星可滑動(dòng)評(píng)分控件
- Android自定義星星評(píng)分控件
- Android開發(fā)之自定義星星評(píng)分控件RatingBar用法示例
相關(guān)文章
Android實(shí)現(xiàn)登錄郵箱的自動(dòng)補(bǔ)全功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)登錄郵箱的自動(dòng)補(bǔ)全功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04Android 有效的解決內(nèi)存泄漏的問(wèn)題實(shí)例詳解
這篇文章主要介紹了Android 有效的解決內(nèi)存泄漏的問(wèn)題的相關(guān)資料,這里舉例說(shuō)明,如何實(shí)現(xiàn)解決內(nèi)存泄漏,需要的朋友可以參考下2016-11-11Android Studio使用教程(四):Gradle基礎(chǔ)
這篇文章主要介紹了Android Studio使用教程(四):Gradle基礎(chǔ),本文講解了什么是Gradle、安裝Gradle、Gradle 基本概念等內(nèi)容,需要的朋友可以參考下2015-05-05Android App中讀取XML與JSON格式數(shù)據(jù)的基本方法示例
這篇文章主要介紹了Android App中讀取XML與JSON格式數(shù)據(jù)的基本方法示例,Android中自帶的JSONObject非常好用,需要的朋友可以參考下2016-03-03Android項(xiàng)目遷移到AndroidX的方法步驟
這篇文章主要介紹了Android項(xiàng)目遷移到AndroidX的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Android實(shí)現(xiàn)QQ的第三方登錄和分享
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)QQ的第三方登錄和分享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11