首頁 > 軟體

Android自定義評分控制元件的完整範例

2022-05-29 14:00:04

前言

無意中翻到幾年前寫過的一個RatingBar,可以拖拽,支援自定義星星圖片,間距大小等引數。

自定義引數

為了方便擴充套件,支援更多的樣式,這裡將大部分引數設定成支援外部可設定的形式。

<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 星星最大個數
  • stepSize 評分步長,即能不能選中0.1個星
  • rating 預設評分
  • starWidth 星星寬度
  • starHeight 星星高度

解析引數

建立星星點陣圖的時候需要根據設定的大小和圖片本身的寬高進行縮放。

繪製

繪製完成之後我們就可以動態設定評分來回顯之前的評分,但是經常我們需要與控制元件互動,動態地設定分數,所以我們還需要重寫onTouchEvent方法完成事件處理。

事件處理

評分需要隨著手指的移動而動態變化,這裡我們記錄下當前手指所在的位置,如果在星星上面,就算出當前位置距離星星左邊的長度佔據整個星星寬度的百分比,然後根據設定的stepSize引數動態微調總評分。

評分監聽

我們還需要將評分暴露給外部,處理主動呼叫getRating()方法獲取之外,我們還可以提供一個監聽介面,實時提供回撥。

功能事件比較簡單,只需要在事件處理的時候,微調總評分完成之後回撥一下資料就可以了。

if (onRatingChangeListener != null) {
    onRatingChangeListener.onRatingChange(rating);
}

外部使用

ratingBar.setOnRatingChangeListener{
    ratingText.text = "當前評分:${it}"
}

總結

到此這篇關於Android自定義評分控制元件的文章就介紹到這了,更多相關Android自定義評分控制元件內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com