怎么在Android中通过自定义View实现一个五星好评效果
这期内容当中小编将会给大家带来有关怎么在Android中通过自定义View实现一个五星好评效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联建站主营阜新网站建设的网络公司,主营网站建设方案,App定制开发,阜新h5小程序制作搭建,阜新网站营销推广欢迎阜新等地区企业咨询
首先自定义属性:
下面看看具体实现:
/**
* Created by Michael on 2019/11/1.
*/
public class RatingStar extends View {
private int normalId;
private int focusId;
private Bitmap normalImg;
private Bitmap focusImg;
private int number;
private int w1;
private int h2;
private int marginLeft;
private int marginTop;
private int marginBottom;
private int marginRight;
private int height;
private int width;
private int p;
private float w0;
private int i0;
private int mGrade;
public RatingStar(Context context) {
this(context,null);
}
public RatingStar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public RatingStar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.RatingStar);
normalId = array.getResourceId(R.styleable.RatingStar_starNormal,0);
focusId = array.getResourceId(R.styleable.RatingStar_starFocus,0);
normalImg = BitmapFactory.decodeResource(getResources(), normalId);
focusImg = BitmapFactory.decodeResource(getResources(), focusId);
number = array.getInteger(R.styleable.RatingStar_starNumber,5);
array.recycle();
i0 = -1;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
w1 = normalImg.getWidth();
h2 = normalImg.getHeight();
//中间间隔
p = 30;
marginTop = 20;
marginBottom = 20;
marginLeft = 20;
marginRight = 20;
height = h2 + marginTop + marginBottom;
width = w1 *number+(number-1)*p +marginLeft+marginRight;
setMeasuredDimension(width, height);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int i = 0; i < number; i++) {
if (i <= i0){
canvas.drawBitmap(focusImg,i*w1+marginLeft+i*p,marginTop,null);
mGrade = i+1;
}else{
canvas.drawBitmap(normalImg,i*w1+marginLeft+i*p,marginTop,null);
}
}
Log.e("msg","我被调用了!");
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();//相对于控件自身的距离
//event.getRawX() 相对于屏幕的距离
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
//case MotionEvent.ACTION_UP:
w0 = getWidth()/5;
i0 = (int) (x/w0);
//性能优化,减少onDraw()调用
if (mGrade == i0+1){
return true;
}
invalidate();
break;
}
return true;
}
}最后看看具体布局中使用:
上述就是小编为大家分享的怎么在Android中通过自定义View实现一个五星好评效果了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
网站标题:怎么在Android中通过自定义View实现一个五星好评效果
地址分享:http://www.jxjierui.cn/article/pipdci.html


咨询
建站咨询
