在执行event.getAction()时,如果我用3根手指触摸。让我们按触摸的顺序将它们称为手指0 1 2,如果我将2移开,则将其1替换为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 documentation


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


我在想同样的事情,我认为这句话意味着getAction()不支持多个指针。

10-08 03:08