public class MyView extends View implements View.OnClickListener {
private Paint paint;
private int[] colors;
private float start=0;
private float stepAngle;
private RectF rectF;
private int centerX;
private int centerY;
private int d=0;
private float x;
private float y;
private Timer timer;
public MyView(Context context) {
this(context,null);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView(){
setOnClickListener(this);
//初始化画笔
paint = new Paint();
//画布颜色
colors=new int[]{Color.RED,Color.BLUE,Color.YELLOW,Color.GREEN,Color.DKGRAY,Color.BLACK,Color.CYAN,Color.MAGENTA};
stepAngle = 360 / colors.length;
rectF = new RectF(-400, -400, 400, 400);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//算出中心点
centerX = getMeasuredWidth() / 2;
centerY = getMeasuredHeight() / 2;
x=centerX;
y=centerY;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);//无锯齿
canvas.translate(x,y);//移动中心点
canvas.rotate(d);//旋转画布
//绘制彩盘
for (int i = 0; i < colors.length; i++) {
paint.setColor(colors[i]);
canvas.drawArc(rectF, start+=stepAngle, stepAngle, true, paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
x=event.getX();
y=event.getY();
// d+=5;
// postInvalidate();
// Log.e("-----------",""+d);
break;
case MotionEvent.ACTION_DOWN:
x=event.getX();
y=event.getY();
timer = new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
d+=1;
postInvalidate();
}
};
timer.schedule(task,0,1);
break;
case MotionEvent.ACTION_UP:
timer.cancel();
break;
}
return true;
}
@Override
public void onClick(View view) {
}
}
自定义View实现旋转画布
最新推荐文章于 2021-05-26 21:51:10 发布