Android自定義RatingBar(星級(jí)評(píng)分控件)

RatingBar是基于SeekBar(拖動(dòng)條)和ProgressBar(狀態(tài)條)的擴(kuò)展,用星形來顯示等級(jí)評(píng)定!

RatingBar實(shí)現(xiàn)的效果圖:

RatingBar

? ? ? 看著自定義的樣式遠(yuǎn)遠(yuǎn)比Android自帶的樣式好看多了,用戶體驗(yàn)度遠(yuǎn)遠(yuǎn)提升,下面我們就來實(shí)現(xiàn)該控件:

? 定義根據(jù)圖片自定一個(gè)RatingBar的背景條,和圖片放到同一個(gè)目錄下面

? ? ?five_rating_bar.xml

<layer-list?xmlns:android="http://schemas.android.com/apk/res/android">

? ? <item ?android:id="@android:id/background"

? ? ? ? ? ? ? ?android:drawable="@drawable/star_border_hide"/>

? ? <item ?android:id="@android:id/secondaryProgress"

? ? ? ? ? ? ? ? android:drawable="@drawable/star_border_hide"/>

? ? ?<item android:id="@android:id/progress"

? ? ? ? ? ? ? ? android:drawable="@drawable/star_border_show"/>

</layer-list>

backgroud:是用來填充背景圖片的,和進(jìn)度條非常類似,當(dāng)我們?cè)O(shè)置最高評(píng)分時(shí)(android:numStars),系統(tǒng)就會(huì)根據(jù)我們的設(shè)置,來畫出以星星為單位的背景(假如android:numStars="5",就會(huì)畫出5顆灰色的星星)

progress:是用來在背景圖片基礎(chǔ)上進(jìn)行填充的指示屬性(和進(jìn)度條類似,第一進(jìn)度位置)

secondaryProgress:同progress一樣屬于第二進(jìn)度位置(如果不定義這個(gè),進(jìn)度條拖動(dòng),每次就畫出一整顆星星(亮),第二進(jìn)度(暗)沒有覆蓋掉第一進(jìn)度之后的位置,從左往右是拖不出來N.5顆星星的,這樣評(píng)分效果就不完整)

? ? style.xml

<style ? name="fiveRatingBar"parent="@android:style/Widget.RatingBar">

? ? ? ?<item ? name="android:progressDrawable">@drawable/five_rating_bar</item>

? ? ? ?<item ? name="android:minHeight">20dp</item>

? ? ? ?<item ? name="android:maxHeight">20dp</item>

</style>

? ? ? 提取樣式屬于個(gè)人習(xí)慣,這里可以不提取出來,可以寫在布局文件中,這里RatingBar的樣式是通過style來切換的。

? ? 通過 parent屬性來選擇繼承的父類,我們這里繼承RatingBar類。

? ? 重新定義 progressDrawable屬性(RatingBar的背景條)

? ? maxHeight和minHeight可以根據(jù)我們圖片像素或者其他參考值來設(shè)定。


在我們需要用到RatingBar的xml配置文件里面添加RatingBar控件。

? ? ?main.xml

<RatingBar

? ? ? ? android:id="@+id/rc_rate"

? ? ? ?android:layout_width="wrap_content"

? ? ? android:layout_height="wrap_content"

? ? ? style="@style/fiveRatingBar"

? ? ? android:layout_gravity="center"

? ? ? android:numStars="5"

? ? ? android:layout_marginLeft="10dp"

? ? ? android:rating="4"/>

常用屬性:

android:isIndicator ? ? ? ? ? ??RatingBar是否是一個(gè)指示器(用戶無法進(jìn)行更改)

android:numStars ? ? ? ? ? ? ?顯示的星型數(shù)量,必須是一個(gè)整形值,像“100”。

android:rating ? ? ? ? ? ? ? ? ??默認(rèn)的評(píng)分,必須是浮點(diǎn)類型,像“1.2”。

android:stepSize ? ? ? ? ? ? ? ?評(píng)分的步長(zhǎng),必須是浮點(diǎn)類型,像“1.2”。

就這么簡(jiǎn)單,我們自定義屬于自己的RatingBar,星級(jí)評(píng)分控件!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,812評(píng)論 25 709
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,837評(píng)論 2 45
  • 先說一下這篇文章里面的內(nèi)容:TCP 客戶端, 自定義對(duì)話框, 自定義按鈕, ProgressBar豎直顯示, 重力...
    楊奉武閱讀 3,900評(píng)論 0 3
  • 這些日子單曲循環(huán)最多的一首歌: 可惜沒如果 有時(shí)候,我們會(huì)突然喜歡上一首歌 喜歡到不停單曲循環(huán) 僅僅是因?yàn)?,想起?..
    芥末er閱讀 337評(píng)論 0 0
  • 萍水相逢,緣起緣落,最終相忘于江湖。小半個(gè)月的旅行就要結(jié)束了,雖然知道下飛機(jī)的那一刻大家彼此之間再無半點(diǎn)牽扯,但還...
    液泡_閱讀 1,103評(píng)論 1 1

友情鏈接更多精彩內(nèi)容