RatingBar这个东西一般我们不怎么用,一般用的话用用系统的也还可以,不满足的话,我们自己弄个自定义的换个图片也好。很多技术牛人总结了自定义RatingBar的全过程。这里就一笔带过:
(1)将要替换的图片放进你的drawable文件夹里。一个是背景,一个是进度。例如:
还有个
(2)在drawable文件夹中弄一个要调用的layer-list(例如:)
<?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/w_3" />
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/w_3" />
<item android:id="@+android:id/progress"
android:drawable="@drawable/w_2" />
</layer-list>
这个较简单,不解释...
(3)在values文件夹中声明一个样式xml(例如:)
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/food_rating_bar_full</item>
<item name="android:minHeight">500px</item>
<item name="android:maxHeight">500px</item>
<item name="android:stepSize">0.1</item>
</style>
</resources>
解释一下,minHeight与maxHeight最好与你的图片大小尺寸一样。否则小心星星显示不全。stepSize指的是每次可前进的进度,0.1就是一个星星可分为10个进度。
(4)布局文件中应用一下,不解释:
<RatingBar
android:id="@+id/rt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="2"
android:rating="1.5"
style="@style/MyRatingBar"/>
numStars表示总共几颗星,1.5表示当前显示几颗星!
需要详细代码的可以到我的csdn上的资源里面获取,或者搜索RatingBar防错位源码。
言归正传,什么叫错位呢?举个例子,有图有真相:
我想要这样的结果:
最后成了这样:
好端端的给我多出来了半颗星星....真是怪哉怪哉!
研究了半天发现,原来你星星弄大了,很容易出现这种现象。原因应该是图片的问题!
目前我也没发现特别好的解决方案,只是把自己的研究结果告诉大家:
(1)自定义星星的图片尽量正方形,且尽量星星在中间,周围留点区域,就像这样:
(2)星星的个数加起来不要比屏幕还长,对了,用layout_width这个属性来限制长度是愚蠢的行为。
(3)在自定义的xml中,maxHeight与minheight尺度最好稍微大于图片长或者宽,且需要一样,没办法,来自下层的bug。
暂时就这些吧,热心的朋友发现问题请及时留言沟通,谢谢!