多点触控

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 要不是没有效果的

 public class MyView extends View{

     public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
} public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
} public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
} @Override
protected void onDraw(Canvas canvas) {
Paint mPaint = new Paint();
mPaint.setColor(Color.GRAY);
mPaint.setTextSize(30);
canvas.drawText("呵呵", 100, 200, mPaint);
} @Override
public boolean onTouchEvent(MotionEvent event) { int pointCount = event.getPointerCount();
System.out.println(pointCount);
if (pointCount == 2) {
final float x0 = event.getX(event.getPointerId(0));
final float y0 = event.getY(event.getPointerId(0)); final float x1 = event.getX(event.getPointerId(1));
final float y1 = event.getY(event.getPointerId(1)); switch (event.getAction()) {
case MotionEvent.ACTION_POINTER_2_DOWN:
System.out.println("ACTION_POINTER_2_DOWN");
break;
case MotionEvent.ACTION_POINTER_1_DOWN:
System.out.println("ACTION_POINTER_1_DOWN");
break;
case MotionEvent.ACTION_POINTER_1_UP:
System.out.println("ACTION_POINTER_1_UP");
break;
case MotionEvent.ACTION_POINTER_2_UP:
System.out.println("ACTION_POINTER_2_UP");
break;
case MotionEvent.ACTION_MOVE: {
System.out.println("ACTION_MOVE");
break;
}
} System.out.println(x0+" "+x1+" "+y0+" "+y1);
} return true;
} }
05-07 15:33