安卓--多指觸控

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ù)需要寫邏輯,以上知識舉例
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Android 多點觸控詳解,在前面的幾篇文章中我們大致了解了 Android 中的事件處理流程和一些簡單的處理方...
    呂侯爺閱讀 6,011評論 3 17
  • 處理多點觸控手勢 多點觸控就是同時把一根以上的手指放在屏幕上。 再繼續(xù)往下以前需要補充一些名詞(弄清楚這些對理解下...
    uncle_charlie閱讀 4,339評論 0 5
  • 開篇 最近在研究自定義View方面的知識。而自定義View中很重要的一塊就是View的交互。這就牽涉到本系列文章要...
    張利強閱讀 10,316評論 2 17
  • 大多數(shù)人眼中的周末,應該是閑暇并有趣的,早早就會在心里計劃著,盼啊盼,就等著把該做的事都做了。 在周末,每個人都可...
    陳汐年閱讀 549評論 11 9
  • 經(jīng)過了昨天的緊張的興奮的考驗,發(fā)現(xiàn)自己已經(jīng)可以很從容的應對啦! 工作室今天依然忙碌,紋繡的、艾灸體驗的、艾灸...
    艾灸養(yǎng)生娟娟閱讀 270評論 0 0