如何防止RatingBar的星星错位

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。


暂时就这些吧,热心的朋友发现问题请及时留言沟通,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值