RatingBar的实现其实是很简单的,只要在xml布局文件中写就行了
范例:
在主布局文件中,只需要写<RatingBar/>即可
main.xml
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context="com.jorlee.ratingbar.MainActivity" > 6 7 <RatingBar 8 android:id="@+id/rating_bar" 9 style="@style/myRatingBar" 10 android:layout_height="wrap_content" 11 android:layout_width="wrap_content" 12 android:numStars="5" 13 android:stepSize="0.1" 14 android:rating="2.5"> 15 </RatingBar> 16 17 18 </RelativeLayout>
RatingBar的layout_height和layout_width一般都设置成wrap_content ,避免图片显示不全的问题
numStars是星星显示的个数,即评分级数
stepSize可以理解为一个评分单位,这里设置为0.1就是最小可以评0.1颗星星
rating是当前评分的星星颗数,这里设置为2.5就是当前有两个半星星被评了分
其中,在main.xml文件中的第9行,style就是自定义RatingBar的关键之处,因此,需要在res/values目录下写一个xml文件
RatingBar.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <style name="myRatingBar" parent="@android:style/Widget.RatingBar"> 4 <item name="android:progressDrawable">@drawable/rating_bar</item> 5 <item name="android:minHeight">44dip</item> 6 <item name="android:maxHeight">44dip</item> 7 </style> 8 9 </resources>
其中style name ="myRatingBar"里面的name "myRatingBar"要对应于main.xml文件中的style="@style/myRatingBar"
<item name="android:minHeight">44dip</item>
<item name="android:maxHeight">44dip</item>
这两个是设置RatingBar的大小的
<item name="android:progressDrawable">@drawable/rating_bar</item>
这个是设置RatingBar样式的,默认的RatingBar是星星的图片,如果想用自己的图片的话,就在res/drawable目录下写一个rating_bar.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 3 4 <item android:id="@+android:id/background" 5 android:drawable="@drawable/pre_unpre"></item> 6 7 <item android:id="@+android:id/secondaryProgress" 8 android:drawable="@drawable/empty"> 9 10 </item> 11 12 <item android:id="@+android:id/progress" 13 android:drawable="@drawable/all"> 14 </item> 15 16 </layer-list>
secondaryProgress设置为没有评分时的图片
progress设置为评分之后的效果图片
系统会自动生成中间过程的效果的图片
在background里也可以设置背景效果,这里我写了一个点击RatingBar发生变化的效果
pre_unpre.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 4 <item android:state_pressed="true" 5 android:drawable="@drawable/bg710"> 6 </item> 7 8 <item android:state_pressed="false" 9 android:drawable="@drawable/empty"></item> 10 </selector>
至此,RatingBar的自定义就写完了。
贴上效果图:(因为图片是随便找的,而且找的也是星星,很丑,勿喷)