Android自定義RatingBar(評分控件)

RatingBar簡單介紹 android

    RatingBar是基於SeekBar(拖動條)和ProgressBar(狀態條)的擴展,用星形來顯示等級評定,在使用默認RatingBar時,用戶能夠經過觸摸/拖動/按鍵(好比遙控器)來設置評分, RatingBar自帶有兩種模式 ,一個小風格 ratingBarStyleSmall,大風格爲ratingBarStyleIndicator大的只適合作指示,不適用與用戶交互。 spa

    
    黃色星形爲 自定義RatingBar
    小綠色爲自帶的 ratingBarStyleSmall
    大綠色爲自
帶的ratingBarStyleIndicator

   經過設置 style="XXXXXXXXXXXXX"進行設置切換(好比:style="?android:attr/ratingBarStyleIndicator" .net

自定義RatingBar須要注意的地方 code

    通常狀況下,系統自帶的RatingBar是遠遠沒法知足開發需求的,咱們根據圖片自定一個RatingBar,在開始實現自定義RatingBar以前,順帶說一下res目錄下圖片放置目錄的區別: xml

    在android sdk 1.5版本以前res目錄下面只有一個drawable一個目錄,在android sdk 1.6版本之後就出現了三個目錄,分別是drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi
    (1)drawable-hdpi裏面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854) 
    (2)drawable-mdpi裏面存放中等分辨率的圖片,如HVGA (320x480)
    (3)drawable-ldpi裏面存放低分辨率的圖片,如QVGA (240x320)
    (4)drawable-xhdpi裏面存放超大分辨率的圖片,至少960dp x 720dp 
因爲咱們自定義實現的RatingBar裏面使用到的星形圖片分辨率比較低,因此通常狀況下,咱們把圖片放到drawable-mdpi或者drawable-ldpi裏面。 繼承

自定義RatingBar的實現過程
    
圖片

    首先,根據圖片自定一個RatingBar的背景條,和圖片放到同一個目錄下面(好比drawable-mdpi),room_rating_bar.xml ip

<?xml version="1.0" encoding="utf-8"?>
	<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
		<item android:id="@+android:id/background"
		android:drawable="@drawable/star1"></item>               
                <item android:id="@+android:id/secondaryProgress"
                android:drawable="@drawable/star1"></item>
                <item android:id="@+android:id/progress"
		android:drawable="@drawable/star2"></item>
</layer-list>

    backgroud是用來填充背景圖片的,和進度條很是相似,當咱們設置最高評分時(android:numStars),系統就會根據咱們的設置,來畫出以星星爲單位的背景(假如android:numStars="5",就會畫出5顆灰色的星星)
    progress是用來在背景圖片基礎上進行填充的指示屬性(和進度條相似,第一進度位置)
    secondaryProgress同progress同樣屬於第二進度位置(若是不定義這個,進度條拖動,每次就畫出一整顆星星(亮),第二進度(暗)沒有覆蓋掉第一進度以後的位置,從左往右是拖不出來N.5顆星星的,這樣評分效果就不完整)
utf-8

    其次,經過開始介紹,咱們知道RatingBar的樣式是經過style來切換的,在android中,咱們能夠經過在styles.xml文件中經過設置style屬性,來繼承咱們須要自定控件類型,以下styles.xml 開發

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="roomRatingBar" parent="@android:style/Widget.RatingBar">
		<item name="android:progressDrawable">@drawable/room_rating_bar</item>
		<item name="android:minHeight">16dp</item>
		<item name="android:maxHeight">16dp</item>
	</style>
</resources>
    經過 parent屬性來選擇繼承的父類,咱們這裏繼承RatingBar類。
    從新定義 progressDrawable屬性(RatingBar的背景條,和咱們在首先裏面介紹的那樣)
maxHeight和minHeight能夠根據咱們圖片像素或者其餘參考值來設定。

   最後,在咱們須要用到RatingBar的xml配置文件裏面添加RatingBar控件。
    main.xml
<RatingBar
        android:id="@+id/room_ratingbar"
        style="@style/roomRatingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
          android:numStars="5"
         android:rating="4"
        android:layout_marginLeft="10dp" >
    </RatingBar>
附上源碼:
      自定義RatingBar實現
相關文章
相關標籤/搜索