4

我正在开发一个多点触控程序,该程序只需要记录第二根手指或食指的动作。现在文档说我们可以使用 MotionEvent.ACTION_POINTER_INDEX_MASK 和 & 它与 action 和 shift by INDEX_SHIFT 来获取使动作像上升或下降的指针。但是这种技术在移动时不起作用。

无论如何,我们可以单独检测某个指针所做的移动动作吗?

谢谢,

4

2 回答 2

1

是的,你的View课堂上可以有这样的东西:

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_MOVE:
            if(event.getPointerCount()>1){
                //where 1 is the index of the second finger
                final int Y = event.getY(1); 
                final int X = event.getX(1); 
            }
            break;
    }
}

因此,根据您想要获取移动的手指,您可以将获取设置为该索引。请记住,值可能是从 0(第一个向下的指针)到getPointerCount()-1. 我在 2.2 Gingerbread 上对此进行了测试,希望对您有用:)

于 2012-07-04T01:17:02.640 回答
0

您可以通过检查哪个指针更改来获得有效的指针索引:

private final int MAX_POINTER = 5; // 5 different touch pointers supported on most devices
private float mLastTouchPositionX[];
private float mLastTouchPositionY[];

@Override
public boolean onTouchEvent(MotionEvent aEvent)
int tActionIndex = aEvent.getActionIndex();
int tPointerCount = aEvent.getPointerCount();
    /*
     * Check which pointer changed on move
     */
    if (tMaskedAction == MotionEvent.ACTION_MOVE) {
        for (int i = 0; i < tPointerCount && i < MAX_POINTER; i++) {
            if (mLastTouchPositionX[i] != aEvent.getX(i) || mLastTouchPositionY[i] != aEvent.getY(i)) {
                mLastTouchPositionX[i] = aEvent.getX(i);
                mLastTouchPositionY[i] = aEvent.getY(i);
                // Found new action index
                tActionIndex = i;
                break;
            }
        }
    }
...
}
于 2016-01-30T14:03:54.203 回答