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