通过android中的索引指针检测移动事件

时间:2012-07-04 01:02:25

标签: android multi-touch

我正在研究一个多点触控程序,它只需要记录第二个手指或索引指针所做的动作。 现在文档说我们可以使用MotionEvent.ACTION_POINTER_INDEX_MASK和&它通过操作并通过INDEX_SHIFT移动以获得使操作像上升或下降的指针。但是这种技术在移动时不起作用。

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

THX,

2 个答案:

答案 0 :(得分: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;
    }
}

因此,根据您想要获取移动的手指,您可以设置获取该索引。 Rember该值可能是0(第一个指向下的指针)到getPointerCount()-1。 我在2.2姜饼上测试了这个,所以我希望它对你有用:)

答案 1 :(得分: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;
            }
        }
    }
...
}