自定義RatingBar的顯示風格

                                          自定義RatingBar的顯示風格

        Android裏有一種控件叫RatingBar,描述某種事物的好評等級的,即星級等級,用5個星星來表示。Android自帶的RatingBar風格基本上已經滿足我們的需求了。但是有的時候爲了滿足客戶的要求,需要自定義風格,無非就是改變星星的顯示風格。下面就介紹如何使用自定義的星星。

1、準備兩張自定義圖片,放在drawable-hdpi目錄下(根據自己的實際情況)。

            

2、xml裏定義RatingBar大致如下:

<RatingBar
    android:id="@+id/event_rating"
    style="@style/RatingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="3dp"
    android:layout_marginTop="1dp"
    android:focusable="false"
    android:isIndicator="false"
    android:max="100"
    android:numStars="5"
    android:rating="0.5"
    android:stepSize="20" />

3、@style/RatingBar就是我們自定的風格,它在values\style.xml裏定義如下:

<style name="RatingBar">
    <item name="android:progressDrawable">@drawable/ratingbar_drawable</item>
    <item name="android:maxHeight">@dimen/home_detail_ratingbar_height</item>
    <item name="android:minHeight">@dimen/home_detail_ratingbar_height</item>
</style>

4、@drawable/ratingbar_drawable對應ratingbar_drawable.xml,它在drawable目錄下。

<?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/ratting_star_normal">
    </item>

    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/ratting_star_normal">
    </item>

    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/ratting_star_selected">
    </item>
</layer-list>

5、home_detail_ratingbar_height的定義在dimens.xml裏定義如下

<dimen name="home_detail_ratingbar_height">20dp</dimen>

6、RatingBar設置值(根據自己的情況設置)。

float rating = 0;
try {
    rating = Float.parseFloat(programmeBean.getProgrammescore());
} catch (NumberFormatException e) {
    e.printStackTrace();
}

rating = rating * 100;

if (rating >= 30) {
    rating = 100;
} else if (rating < 30 && rating >= 10) {
    rating = 80;
} else if (rating < 10 && rating >= 7.55) {
    rating = 60;
} else if (rating < 7.55 && rating >= 6) {
    rating = 40;
} else if (rating < 6 && rating >= 1) {
    rating = 20;
} else if (rating < 1 && rating > 0) {
    rating = 10;
} else {
    rating = 0;
}

rating = rating / (float)(mRatingBarDetails.getMax() / mRatingBarDetails.getNumStars());
mRatingBarDetails.setRating(rating);

7、效果圖

 

覺得ok記得點贊噢,謝謝。

                                                                                  THE   END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章