1、體驗與發(fā)現(xiàn)
首先看一下代碼:
@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是不包含其中的,感覺有點坑
以下都是默認在一次多指觸控過程中:
- ACTION_DOWN:觸控時,總是第一個被觸發(fā),之后就不會再觸發(fā)
- ACTION_POINTER_DOWN:只要還有觸控點在屏幕上,之后手指下去都是之觸發(fā)這個事件
- ACTION_UP:觸控點離開時,僅當最后一個觸控點消失時才會觸發(fā)
- ACTION_POINTER_UP:只要還有觸控點在屏幕上,每當手指離開都會觸發(fā)這個事件
- ACTION_MOVE:可以獲取按下觸控點的位置(getX和getY)
過程:手指1 down →手指2 down →手指3 down → 手指3 up → 手指2 up →手指1 up
可以看到,第一個下去的才會觸發(fā)ACTION_DOWN,最后一個起來才會觸發(fā)ACTION_UP
具體自己去體驗吧,很簡單的代碼,實驗起來也很簡單,在activity貼上代碼,慢慢點吧。
2、重要的方法
getPointerCount():返回觸控點總數(shù)
getActionMasked():用這個方法才能出現(xiàn)掩蓋多指觸控的事件
getActionIndex():屏幕上每個手指,都對應一個index,返回觸發(fā)按下或抬起動作的下標index
getX (int pointerIndex): 獲取指定觸控點的X坐標
getY (int pointerIndex) :獲取指定觸控點的Y坐標
知道上面這些,就靠你自己發(fā)揮了,重點是,要記錄x,y和善用隨后一個才會出現(xiàn)的ACTION_UP
3、在ACTION_MOVE獲取位置信息
@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,那么你可以判斷觸控點的數(shù)量來實現(xiàn)邏輯,比如:
- 一個觸控點,我們就直接認為是簡單的移動事件,比如拖拽的邏輯等
- 兩個觸控點,也許你會寫什么放大縮小的邏輯
- 三個觸控點,這是三指切換應用什么的
- 根據(jù)需要寫邏輯,以上知識舉例