安卓之单点和多点触摸(画圆)

xiaoxiao2021-02-27  279

1.知识图谱

A.单点触摸

自己写一个MyView实体类继承view

代码如下:

public class MyView extends View { private float x; private float y; private int r=100; public MyView(Context context) { super(context); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint=new Paint(); canvas.drawCircle(x,y,r,paint); } @Override public boolean onTouchEvent(MotionEvent event) { //获取手指的行为 int action=event.getAction(); //获取手指的坐标 x=event.getX(); y=event.getY(); switch (action) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_MOVE: break; } //重新调用onDraw 重绘 invalidate(); return true; } }

2.多点触摸

首先要写一个Circle的实体类

package com.example.cookie.android0709twopointstouch; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import java.util.Random; /** * Created by Administrator on 2017/7/9 0009. */ public class Circle { public float x; public float y; public int r=100; public int pointId; public int red; public int green; public int blue; Random random=new Random(); public Circle(float x, float y, int pointId) { this.x = x; this.y = y; this.pointId = pointId; red=random.nextInt(255); green=random.nextInt(255); blue=random.nextInt(255); } public void drawSelf(Canvas canvas, Paint paint){ //设置随机画笔的颜色 paint.setColor(Color.rgb(red,green,blue)); paint.setStyle(Paint.Style.STROKE); canvas.drawCircle(x,y,r,paint); } } 再写一个MyView继承View

package com.example.cookie.android0709twopointstouch; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/7/9 0009. */ public class MyView extends View { public List<Circle> circles=new ArrayList<>(); public MyView(Context context) { super(context); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint=new Paint(); for (Circle circle : circles) { circle.drawSelf(canvas,paint); } } @Override public boolean onTouchEvent(MotionEvent event) { //获取手指的行为 int action=event.getAction(); int action_code=action&0xff; //手指的下标 int pointIndex=action>>8; //获取手指的下标 float x=event.getX(pointIndex); float y=event.getY(pointIndex); //获取手指的名字ID int pointId=event.getPointerId(pointIndex); if (action_code>=5){ action_code-=5; } switch (action_code) { case MotionEvent.ACTION_DOWN: //实例化圆 Circle circle=new Circle(x,y,pointId); circles.add(circle); break; case MotionEvent.ACTION_UP: circles.remove(get(pointId)); break; case MotionEvent.ACTION_MOVE: for (int i = 0; i < event.getPointerCount(); i++) { int id=event.getPointerId(i); get(id).x=event.getX(); get(id).y=event.getY(); } break; } //重新绘制 invalidate(); return true; } public Circle get(int pointId){ for (Circle circle : circles) { if (circle.pointId==pointId){ return circle; } } return null; } }

转载请注明原文地址: https://www.6miu.com/read-7203.html

最新回复(0)