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