Java 当event.getAction不';T

Java 当event.getAction不';T,java,android,touch,motionevent,Java,Android,Touch,Motionevent,执行event.getAction()时,如果我用3个手指触摸。让我们按他们触摸的顺序称他们为finger 0 1 2,如果我先移除2,然后移除1,MotionEvent。动作指针向上不会切换到,同样,当我放下手指时,MotionEvent。动作指针向下不会切换到。但开关仍将转到MotionEvent。需要时,操作将移动。但是,当我将开关的参数更改为event.getActionMasked()时,所有案例都将被正确调用。我想了解这是为什么,因为在我的单触开关语句中,event.getActio

执行
event.getAction()
时,如果我用3个手指触摸。让我们按他们触摸的顺序称他们为finger 0 1 2,如果我先移除2,然后移除1,
MotionEvent。动作指针向上
不会切换到,同样,当我放下手指时,
MotionEvent。动作指针向下
不会切换到。但开关仍将转到
MotionEvent。需要时,操作将移动。但是,当我将开关的参数更改为
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;
}
发件人:

考虑使用getActionMasked()和getActionIndex()检索单独的掩码操作和指针索引


我想知道同样的事情,我假设这句话的意思是
getAction()
不支持多个指针。

因为getActionMasked()和getAction()只对第一个手指(id=0)相等

例如MotionEvent.ACTION\u POINTER\u DOWN==5

对于第一个手指,两者都将等于0(0x0000),因此它不会到达那里, 但是对于第二个(id=1),getActionMasked()=5(0x0005)和getAction()=261(0x0105)之间存在差异

因此,要进入

case MotionEvent.ACTION_POINTER_DOWN:
您应该使用getActionMasked()

它按动作\u掩码==255(0x00FF)过滤getAction()结果

指针id将按如下方式删除:

261 & 255 = 5 (0x0105 & 0x00ff = 0x0005)
将使用掩码65280(0xff00)提取p.S.指针,如下所示:

然后换8档:

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