万能自定义RatingBar 用起来简单易理解

     今天在项目中写到一个类似美团、滴滴这种市面上常用的带星评价的需求,于是拿到需求的第一反应就是去找度娘了,然后了解到google有一种控件叫RatingBar,因为以前没有做过类似的需求,所以第一反应很开森。但是当拿到用的时候才发现啊并不是那么的如人意,因为这个扩展性太弱,基本上不能满足大众的自定义需求。 然后由于自己项目的需求,又找了一些其它的帖子看了下,感觉都不怎么适合,然后去看了RatingBar的源码之后决定自己动手自定义一个。先看效果图:

        

            废话不多说 ,直接怼代码:



           这是drawable文件 这里面主要是设置选中时候的star的样式以及没有选中时候的样式:

        <?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/star_20x20_hl" />
               <item android:id="@android:id/secondaryProgress"
              android:drawable="@drawable/star_20x20_n" />
             <item android:id="@android:id/progress"
              android:drawable="@drawable/star_20x20_n" />
     </layer-list>

               

           接下来是自定义类里需要的attrs

     <?xml version="1.0" encoding="utf-8"?>

        <resources>
          <declare-styleable name="RatingBar">
            <!--尺寸值-->
            <attr name="starImageSize" format="dimension" />
           <!--星星间距-->
          <attr name="starPadding" format="dimension" />
          <!--星星总数-->
           <attr name="starCount" format="integer" />
          <!--空白的星星资源文件值-->
          <attr name="starEmpty" format="reference" />
          <!--满星资源文件值-->
          <attr name="starFill" format="reference" />
          <!--半星资源文件值-->
          <attr name="starHalf" format="reference" />
          <!--是否可点击boolean值-->
          <attr name="clickable" format="boolean" />
          <!--当前进度float值-->
          <attr name="starStep" format="float" />
          <!--每次进度方式的值,整星还是半星-->
          <attr name="stepSize">
            <enum name="Half" value="0" />
            <enum name="Full" value="1" />
          </attr>
      </declare-styleable>

       </resources>   

 

       然后直接贴出自定义类  继承LinearLayout
     

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.hconline.antapp_client.R;

import java.math.BigDecimal;
/**
 * Created by dylan on 2015/6/11.
 * 自定义打分控件RatingBar
 * 可以自定义星星大小和间距
 * Correction clickEvent from Xml
 */
public class RatingBar extends LinearLayout {
    private int starNum;

    public float getStarNum() {
        return starNum;
    }

    public void setStarNum(int starNum) {
        this.starNum = starNum;
    }

    /**
     * 是否可点击
     */
    private boolean mClickable;
    /**
     * 星星总数
     */
    private int starCount;
    /**
     * 星星的点击事件
     */
    private OnRatingChangeListener onRatingChangeListener;
    /**
     * 每个星星的大小
     */
    private float starImageSize;
    /**
     * 每个星星的间距
     */
    private float starPadding
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值