RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。
使用过RatingBar的人都知道谷歌提供的这个控件有点过于古板了,自己定义的图片只能半个或者一个显示,并不能达到如4.1个的效果(可能是本人研究不够深入),下面是我自己定义的RatingBar,可以自己定义属性,设置星星图片,间距等。如下图
至于其他的功能嘛,是尽量跟着原生的RatingBar来写的,下面是自定义的代码:
public class HaisRatingBar extends View {
/**
* 正常的
*/
private static final int NORMAL = 0;
/**
* 小型的
*/
private static final int SAMLL = 1;
/**
* 背景图片
*/
private Bitmap backgroundImg;
/**
* 显示点亮的星星
*/
private Bitmap starLightImg;
/**
* 星星总数
*/
private int starNums = 6;
/**
* 选中的数量
*/
private float rating = 0;
/**
* 每个星星间隔距离
* 单位:px
*/
private int space;
/**
* 是否只是指示器
*/
private boolean mIndicator;
/**
* 类型(即大图还是小图)
*/
private int type;
/**
* 背景图片宽度
*/
private int bgWidth;
/**
* 背景图片高度
*/
private int bgHeight;
/**
* 绘制 X方向的开始位置
*/
private int drawStartX;
public interface OnRatingBarChangeListener {
void onRatingChanged(HaisRatingBar ratingBar, float rating, boolean fromUser);
}
private OnRatingBarChangeListener mOnRatingBarChangeListener;
public HaisRatingBar(Context context) {
this(context, null);
}
public HaisRatingBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HaisRatingBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HaisRatingBa