自定义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

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