首先看一下代码:
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_DOWN:
- Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_POINTER_DOWN:
- Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_MOVE:
- break;
- case MotionEvent.ACTION_UP:
- Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_POINTER_UP:
- Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
- default:
- break;
- }
- return true;
- }
安卓多指触控涉及的触摸事件就只有四个:ACTION_DOWN、ACTION_POINTER_DOWN、ACTION_UP、ACTION_POINTER_UP
ACTION_MOVE是不包含其中的,感觉有点坑
以下都是默认在一次多指触控过程中:
过程:手指1 down →手指2 down →手指3 down → 手指3 up → 手指2 up →手指1 up
可以看到,第一个下去的才会触发ACTION_DOWN,最后一个起来才会触发ACTION_UP
具体自己去体验吧,很简单的代码,实验起来也很简单,在activity贴上代码,慢慢点吧。
getPointerCount():返回触控点总数
getActionMasked():用这个方法才能出现掩盖多指触控的事件
getActionIndex():屏幕上每个手指,都对应一个index,返回触发按下或抬起动作的**下标**index
getX (int pointerIndex): 获取指定触控点的X坐标
getY (int pointerIndex) :获取指定触控点的Y坐标
知道上面这些,就靠你自己发挥了,重点是,要记录x,y和善用随后一个才会出现的ACTION_UP
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_DOWN:
- Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_POINTER_DOWN:
- Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_MOVE:
- if(event.getPointerCount()==2){
- Log.i(TAG, "onTouchEvent:0 x:"+event.getX(0)+" y:"+event.getY(0));
- Log.i(TAG, "onTouchEvent:1 x:"+event.getX(1)+" y:"+event.getY(1));
- }
- break;
- case MotionEvent.ACTION_UP:
- Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
- break;
- case MotionEvent.ACTION_POINTER_UP:
- Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
- default:
- break;
- }
- return true;
- }
只是在ACTION_MOVE获取对应的X和Y,那么你可以判断触控点的数量来实现逻辑,比如: