import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CustomStartView extends View {
private Bitmap originalStart;
private Bitmap gradeStart;
private int startNumber;
private int startHeight,startwidth;
private Paint gradePaint;
private int endGrade;
public CustomStartView(Context context) {
this(context,null);
}
public CustomStartView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomStartView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.CustomStartView);
int original=typedArray.getResourceId(R.styleable.CustomStartView_originalStar,0);
int grade=typedArray.getResourceId(R.styleable.CustomStartView_focusStar,0);
startNumber=typedArray.getInt(R.styleable.CustomStartView_startNumber,0);
originalStart=BitmapFactory.decodeResource(getResources(),original);
gradeStart=BitmapFactory.decodeResource(getResources(),grade);
typedArray.recycle();
gradePaint=new Paint();
gradePaint.setAntiAlias(true);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
startHeight=gradeStart.getHeight();
startwidth=gradeStart.getWidth();
int height=startHeight;
int width=startwidth*startNumber;
setMeasuredDimension(width,height);
}
@Override
protected void onDraw(Canvas canvas) {
for (int i=0;i<startNumber;i++){
int x=i*startwidth;
if (endGrade>i){
canvas.drawBitmap(gradeStart,x,0,null);
}else {
canvas.drawBitmap(originalStart,x,0,null);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
int x= (int) event.getX();
int y= (int) event.getY();
int currentStart=x/startwidth+1;
if (currentStart<0){
currentStart=0;
}else if (currentStart>5){
currentStart=5;
}
endGrade=currentStart;
invalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
android开发自定义五星好评Demo
猜你喜欢
转载自blog.csdn.net/yaoyaoyao_123/article/details/91803350
今日推荐
周排行