首先:自定义简介
详细:https://blog.csdn.net/d7hz99qulu/article/details/56678891
自定义View中如果深入研究的话,短短几篇文章是远远不能描述的,所以这篇文章只是比较浅的效果,
实现上图效果的思路:
关于圆形:
将几种颜色写入数组,之后 将整个圆形根据颜色数组的长度进行平均分(360/颜色数组的长度),
如果单单要实现一个圆形的话直接用扇形绘制一个圆形就可以满足效果。
关于跟随鼠标移动:
初始化,重写onTouchEvent方法,使用switch实现鼠标Down、Up、Move事件,将坐标赋给初始化的值
关于旋转、关于点击加速、、、
public class MyView2 extends View{ private Paint paint; private int[] colors; private int angle; private int widthX; private int widthY; private int coordX; private int coordY; private RectF rect; private Paint paintA; private Paint paintB; public MyView2(Context context) { this(context,null); } public MyView2(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public MyView2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); widthX = getMeasuredWidth(); widthY = getMeasuredHeight(); coordX = widthX/2; coordY = widthY/2; } private void init() { paint = new Paint(); paintA = new Paint(); paintA.setColor(Color.RED); paintB = new Paint(); paintB.setColor(Color.BLUE); colors = new int[]{ Color.BLUE, Color.RED, Color.YELLOW, Color.CYAN, Color.BLACK, Color.GREEN, Color.BLUE, Color.RED, Color.YELLOW, Color.CYAN, Color.BLACK, Color.GREEN }; rect = new RectF(-100, -100, 100, 100); angle = 360 / colors.length; } private Canvas mycanvas; int d = 30; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mycanvas = canvas; canvas.translate(coordX,coordY); canvas.rotate(d); drawColor(canvas); } private void drawColor(Canvas canvas){ int start_angle = 0; for (int i = 0; i < colors.length; i++) { int color = colors[i]; paint.setColor(color); canvas.drawArc(rect,start_angle,angle,true,paint); start_angle += angle; } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: coordX = (int)event.getX(); coordY = (int) event.getY(); TimerTask timerTask = new TimerTask() { @Override public void run() { d+=1; postInvalidate(); } }; Timer timer = new Timer(); timer.schedule(timerTask,0,50); break; case MotionEvent.ACTION_UP: coordX = (int)event.getX(); coordY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: coordX = (int)event.getX(); coordY = (int) event.getY(); break; } postInvalidate(); return true; } }
首先:自定义简介
详细:https://blog.csdn.net/d7hz99qulu/article/details/56678891
自定义View中如果深入研究的话,短短几篇文章是远远不能描述的,所以这篇文章只是比较浅的效果,