Java Android多点触控事件索引

Java Android多点触控事件索引,java,android,c++,android-ndk,Java,Android,C++,Android Ndk,我遇到了一个问题,当手指仍被按下时,多点触摸事件导致触摸索引被释放 我的Java包装器代码粘贴在下面。该函数将AccviPosikIt整数传递给一个C++函数,该函数使用ActVeCHIVER值作为数组索引来存储数组中的上/下状态。向下事件将数组值设置为true,向上事件将数组值设置为false 行为如下: 如果按下一个手指,则触摸索引0为真 如果按下两个手指,则触摸指数0和1均为真 如果随后取下第二根手指,则触摸索引0为真,触摸索引1为假(如预期) 如果取而代之的是,取下第一个手指,第二个手

我遇到了一个问题,当手指仍被按下时,多点触摸事件导致触摸索引被释放

我的Java包装器代码粘贴在下面。该函数将AccviPosikIt整数传递给一个C++函数,该函数使用ActVeCHIVER值作为数组索引来存储数组中的上/下状态。向下事件将数组值设置为true,向上事件将数组值设置为false

行为如下:

  • 如果按下一个手指,则触摸索引0为真
  • 如果按下两个手指,则触摸指数0和1均为真
  • 如果随后取下第二根手指,则触摸索引0为真,触摸索引1为假(如预期)
  • 如果取而代之的是,取下第一个手指,第二个手指保持接触,则触摸索引0和1都为假。我希望触摸索引0为假,触摸索引1仍然为真
这是我的Java包装器代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    Integer activePointer = (event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT);
    Float x = event.getX(activePointer);
    Float y = event.getY(activePointer);

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
    case MotionEvent.ACTION_POINTER_DOWN:
        // Log.i("touchtest", "action_down " + activePointer.toString() +
        // "(" + x + "," + y + ")");
        androidRenderer.touch(x, y, activePointer);
        break;
    case MotionEvent.ACTION_MOVE:
        // Log.i("touchtest", "action_move " + activePointer.toString() +
        // "(" + x + "," + y + ")");
        androidRenderer.move(x, y, activePointer);
        break;
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_POINTER_UP:
        // Log.i("touchtest", "action_up " + activePointer.toString() + "("
        // + x + "," + y + ")");
        androidRenderer.up(x, y, activePointer);
        break;
    }
    return true;
}
我已经阅读了文档,但不是很清楚

我搞乱了
event.findPointerIndex
函数,但无法推断出它实际执行的任何模式


我无法想象这是一个罕见的问题。有这方面经验的人能提供你的建议吗?谢谢。

我对多点触控事件处理得不多,但在switch语句中包含默认大小写可能会有所帮助。

(event.getAction()>>MotionEvent.ACTION\u POINTER\u ID\u SHIFT)
将只提供指针索引。在整个多点触控手势过程中,指针索引可能会发生变化

实际上,您需要的是一个指针ID。
MotionEvent.ACTION\u pointer\u ID\u SHIFT
name有点混乱,因为它返回的是指针索引而不是指针ID,因此它被弃用并重命名为MotionEvent.ACTION\u pointer\u Index\u SHIFT,因为API 8。指针ID唯一标识指针

要获取指针ID,请使用

将指针ID传递给
androidRenderer.xxx(x,y,activePointerId)你应该很好