簡體   English   中英

為什么event.getActionMasked不在event.getAction時切換到這些情況

[英]Why does event.getActionMasked switch to these cases when event.getAction doesn't

當做event.getAction() ,如果我用三根手指觸摸。 讓我們按觸摸的順序將它們稱為手指0 1 2,如果我MotionEvent.ACTION_POINTER_UP 2移開,則MotionEvent.ACTION_POINTER_UP不會切換到,同樣,當我放下手指時, MotionEvent.ACTION_POINTER_DOWN也不會切換到。 但是在需要時,開關仍將轉到MotionEvent.ACTION_MOVE 但是,當我將開關的參數更改為event.getActionMasked()所有情況將被正確調用。 我想了解為什么會這樣,因為在我的單觸開關語句中, event.getAction()可以正常工作。

//replace with getAction(), first and third case don't always get called.  Only sometimes.
switch(event.getActionMasked()) 
{
    case MotionEvent.ACTION_POINTER_DOWN: 
        prevZoomX = Math.abs(x1-x2);
        prevZoomY = Math.abs(y1-y2);
        break;

    case MotionEvent.ACTION_MOVE:
        float deltaX = (Math.abs(x1-x2) - prevZoomX);
        float deltaY = (Math.abs(y1-y2) - prevZoomY);
        Log.d("zoom","dx: " + deltaX/(mDensity/2) + " prevZoomX " + prevZoomX);
        Log.d("zoom","dy: " + deltaY/(mDensity/2) + " prevZoomY " + prevZoomY);

        mRenderer.zoom = Math.abs(deltaX) > Math.abs(deltaY) ? deltaX/(mDensity/2) : deltaY/(mDensity/2);
        Log.d("zoom","" + mRenderer.zoom);
        prevZoomX = Math.abs(x1-x2);
        prevZoomY = Math.abs(y1-y2);
        break;
    case MotionEvent.ACTION_POINTER_UP:
        Log.d("finger","fingers left: " + event.getPointerCount());
        break;
}

MotionEvent文檔中

考慮使用getActionMasked()和getActionIndex()來檢索單獨的掩碼操作和指針索引。

我在想同樣的事情,我認為這句話意味着getAction()不支持多個指針。

因為getActionMasked()和getAction()僅對於第一個手指(id = 0)相等。

例如MotionEvent.ACTION_POINTER_DOWN == 5。

對於第一個手指,兩個手指都將等於0(0x0000),因此不會到達那里,但是對於第二個手指(id = 1),將存在差異getActionMasked()= 5(0x0005)和getAction()= 261(0x0105)

因此,進入:

case MotionEvent.ACTION_POINTER_DOWN:

您應該使用getActionMasked()!

它通過ACTION_MASK == 255(0x00FF)過濾getAction()結果

指針ID將被刪除,如下所示:

261 & 255 = 5 (0x0105 & 0x00ff = 0x0005)

PS指針將使用掩碼65280(0xff00)提取,如下所示:

261 & 65280 = 256 (0x0105 & 0xff00 = 0x0100)

然后按移位8移位:

256 >> 8 = 1 (0b100000000 >> 8 = 0b1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM