android 多点触控
多点触控
1.多点触控从字面意思讲就是你用大于等于2根的手指触摸子啊手机屏幕上。
Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEvent的一些常用的方法:
getPointerCount() 获得触屏的点数。
getPointerId(int pointerIndex) 返回一个触摸点的标示,pointIndex是你第几个触控点的索引
getX() 获得触屏的X坐标值
getY() 获得触屏的Y坐标值
getAction() 获得触屏的动作
ACTION_DOWN:按下的动作开始,比如用手指按屏幕。
ACTION_UP:按下的动作完成,比如手指停止按屏幕,离开屏幕。
ACTION_MOVE:在动作开始和完成之间的移动,比如手指在屏幕上滑动。
MotionEvent.ACTION_POINTER_1_DOWN:第一个触摸点点击事件
MotionEvent.ACTION_POINTER_2_DOWN:第二个触摸点点击事件
MotionEvent.ACTION_POINTER_1_UP:第一个触摸点松开事件
MotionEvent.ACTION_POINTER_2_UP:第二个触摸点松开事件
2.下面通过一个例子来说明:
注意:
onTouchEvent返回true 要不是没有效果的
1 public class MyView extends View{ 2 3 public MyView(Context context, AttributeSet attrs, int defStyle) { 4 super(context, attrs, defStyle); 5 // TODO Auto-generated constructor stub 6 } 7 8 public MyView(Context context, AttributeSet attrs) { 9 super(context, attrs); 10 // TODO Auto-generated constructor stub 11 } 12 13 public MyView(Context context) { 14 super(context); 15 // TODO Auto-generated constructor stub 16 } 17 18 @Override 19 protected void onDraw(Canvas canvas) { 20 Paint mPaint = new Paint(); 21 mPaint.setColor(Color.GRAY); 22 mPaint.setTextSize(30); 23 canvas.drawText("呵呵", 100, 200, mPaint); 24 } 25 26 @Override 27 public boolean onTouchEvent(MotionEvent event) { 28 29 int pointCount = event.getPointerCount(); 30 System.out.println(pointCount); 31 if (pointCount == 2) { 32 final float x0 = event.getX(event.getPointerId(0)); 33 final float y0 = event.getY(event.getPointerId(0)); 34 35 final float x1 = event.getX(event.getPointerId(1)); 36 final float y1 = event.getY(event.getPointerId(1)); 37 38 switch (event.getAction()) { 39 case MotionEvent.ACTION_POINTER_2_DOWN: 40 System.out.println("ACTION_POINTER_2_DOWN"); 41 break; 42 case MotionEvent.ACTION_POINTER_1_DOWN: 43 System.out.println("ACTION_POINTER_1_DOWN"); 44 break; 45 case MotionEvent.ACTION_POINTER_1_UP: 46 System.out.println("ACTION_POINTER_1_UP"); 47 break; 48 case MotionEvent.ACTION_POINTER_2_UP: 49 System.out.println("ACTION_POINTER_2_UP"); 50 break; 51 case MotionEvent.ACTION_MOVE: { 52 System.out.println("ACTION_MOVE"); 53 break; 54 } 55 } 56 57 System.out.println(x0+" "+x1+" "+y0+" "+y1); 58 } 59 60 return true; 61 } 62 63 64 65 66 }