测试手机多点触摸
16lz
2021-01-26
1.代码演示:
package com.example.my_android_pointstouch;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. */public class MyView extends View { List 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; //手指的下标index 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 c=new Circle(x,y,pointId); //将圆添加到集合中 circles.add(c); 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(i); get(id).y=event.getY(i); } break; } //重新调用onDraw 重绘 invalidate(); return true; } //圆的下标 public Circle get(int pointId){ for (Circle circle : circles) { if (circle.pointId==pointId){ return circle; } } return null; }}
(2)圆package com.example.my_android_pointstouch;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import java.util.Random;/** * Created by Administrator on 2017/7/9. */public class Circle { public float x; public float y; public int r=100; public int pointId; int red; int green; 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)); canvas.drawCircle(x,y,r,paint); }}
(3)MainActivitypackage com.example.my_android_pointstouch;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import java.util.Random;/** * Created by Administrator on 2017/7/9. */public class Circle { public float x; public float y; public int r=100; public int pointId; int red; int green; 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)); canvas.drawCircle(x,y,r,paint); }}
更多相关文章
- Android(安卓)技术总结(016)—— 使用百度地图api获取当前位置
- TextView获取行数
- Android(安卓)获取系统自带相机的照片
- 自定义Android侧滑菜单控件
- android实现从网上获取数据
- android 获取控件宽度高度
- Android(安卓)Calendar的运用
- Android学习之使用HttpURLConnection下载文件
- 模拟抽奖的九宫格动画效果