1、體驗(yàn)與發(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;
}
安卓多指觸控涉及的觸摸事件就只有四個(gè):ACTION_DOWN腹备、ACTION_POINTER_DOWN傻工、ACTION_UP、ACTION_POINTER_UP
ACTION_MOVE是不包含其中的专控,感覺有點(diǎn)坑
以下都是默認(rèn)在一次多指觸控過程中:
- ACTION_DOWN:觸控時(shí),總是第一個(gè)被觸發(fā)遏餐,之后就不會(huì)再觸發(fā)
- ACTION_POINTER_DOWN:只要還有觸控點(diǎn)在屏幕上伦腐,之后手指下去都是之觸發(fā)這個(gè)事件
- ACTION_UP:觸控點(diǎn)離開時(shí),僅當(dāng)最后一個(gè)觸控點(diǎn)消失時(shí)才會(huì)觸發(fā)
- ACTION_POINTER_UP:只要還有觸控點(diǎn)在屏幕上失都,每當(dāng)手指離開都會(huì)觸發(fā)這個(gè)事件
- ACTION_MOVE:可以獲取按下觸控點(diǎn)的位置(getX和getY)
過程:手指1 down →手指2 down →手指3 down → 手指3 up → 手指2 up →手指1 up
可以看到柏蘑,第一個(gè)下去的才會(huì)觸發(fā)ACTION_DOWN,最后一個(gè)起來才會(huì)觸發(fā)ACTION_UP
具體自己去體驗(yàn)吧嗅剖,很簡(jiǎn)單的代碼辩越,實(shí)驗(yàn)起來也很簡(jiǎn)單嘁扼,在activity貼上代碼信粮,慢慢點(diǎn)吧。
2趁啸、重要的方法
getPointerCount():返回觸控點(diǎn)總數(shù)
getActionMasked():用這個(gè)方法才能出現(xiàn)掩蓋多指觸控的事件
getActionIndex():屏幕上每個(gè)手指强缘,都對(duì)應(yīng)一個(gè)index,返回觸發(fā)按下或抬起動(dòng)作的下標(biāo)index
getX (int pointerIndex): 獲取指定觸控點(diǎn)的X坐標(biāo)
getY (int pointerIndex) :獲取指定觸控點(diǎn)的Y坐標(biāo)
知道上面這些不傅,就靠你自己發(fā)揮了旅掂,重點(diǎn)是,要記錄x访娶,y和善用隨后一個(gè)才會(huì)出現(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獲取對(duì)應(yīng)的X和Y,那么你可以判斷觸控點(diǎn)的數(shù)量來實(shí)現(xiàn)邏輯崖疤,比如:
- 一個(gè)觸控點(diǎn)秘车,我們就直接認(rèn)為是簡(jiǎn)單的移動(dòng)事件,比如拖拽的邏輯等
- 兩個(gè)觸控點(diǎn)劫哼,也許你會(huì)寫什么放大縮小的邏輯
- 三個(gè)觸控點(diǎn)叮趴,這是三指切換應(yīng)用什么的
- 根據(jù)需要寫邏輯,以上知識(shí)舉例