2016-10-20 190 views
1

想要觸發on two fingers down事件幾毫秒。以編程方式觸發ACTION_POINTER_DOWN事件

我能夠通過使用此代碼

objImageView.getLocationOnScreen(coords); 
        int xa = coords[0]; 
        int ys = coords[1]; 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 

我們觸發簡單的觸摸事件,如果我嘗試做ACTION_POINTER_DOWN沒事一樣正在發生的事情。這裏是我的代碼:

int[] coords = new int[2]; 
     parentLayout.getLocationOnScreen(coords); 
     int xa = coords[0]; 
     int ys = coords[1]; 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 

我谷歌周圍,但找不到任何東西試一試。 我想觸發相同的事件,當用戶放下兩根手指並將手指放在那裏幾毫秒時調用。

在此先感謝。

+0

那麼,我仍然無法執行該操作,現在,我通過用另一種方法寫入它們來強制調用TouchListener的代碼。 –

+0

爲什麼你會使用動作指針?如果您希望能夠每隔幾毫秒觸發一次,請使用帶有Timer或其他計時事件的線程。將onTouch代碼解壓縮到void並從線程和onTouch中觸發它 – Zoe

回答

1

要模擬「兩根手指」,您需要創建一個運動事件,其中包含多於一個指針,就像現在這樣。

爲此,請使用支持多指針的MotionEvent obtain變體,如文檔here所述。

MotionEvent obtain (long downTime, 
       long eventTime, 
       int action, 
       int pointerCount, 
       PointerProperties[] pointerProperties, 
       PointerCoords[] pointerCoords, 
       int metaState, 
       int buttonState, 
       float xPrecision, 
       float yPrecision, 
       int deviceId, 
       int edgeFlags, 
       int source, 
       int flags) 

首先,你應該派遣了第一根指頭(就像你所做的那樣),當你將要模擬MotionEvent.ACTION_POINTER_DOWN你應該使用上述obtain變化的事件。

字段是不言自明的,確保PARAMS是:

  1. pointerCount = 2
  2. pointerProperties = [firstFingerPointerProperties,secondFingerPointerProperties]
  3. pointerCoords = [firstFingerPointerCoords,secondFingerPointerCoords]
1

Documentation表示:「一個手勢以ACTION_DOWN開頭,提供第一個指針的位置,當每個額外的指針向下或向上時,框架將相應地產生一個帶有ACTION_POINTER_DOWN或ACTION_POINTER_UP的運動事件「。所以你首先需要觸發簡單的觸摸事件。並看看this的問題。

+0

謝謝@Andriy我將檢查那些不適合我的 –

+0

。 –

+0

@SyedaZunairah你試過了什麼代碼?你應該試試這樣一個序列:ACTION_DOWN ACTION_POINTER_DOWN可選小延遲ACTION_POINTER_UP ACTION_UP – user1643723

1

您應該生成如下所示的序列:ACTION_DOWNACTION_POINTER_DOWN→可選小延遲→ACTION_POINTER_UPACTION_UP

您還應該爲第二個指針正確設置指針索引(和其他元數據),因爲否則手勢檢測代碼可能無法說明第二次按鍵描述次要手指而不是主要手指。

使用this method填寫描述第二次按下的ACTION_POINTER_DOWN的所有必要信息。 請務必傳遞正確的pointerProperties

相關問題