我遇到了一个问题,多点触控事件导致在手指仍被按下时释放触摸索引。
我的 Java 包装器代码粘贴在下面。该函数将 activePointer 整数传递给 C++ 函数,该函数将 up/down 状态存储在数组中,使用 activePointer 值作为数组索引。Down 事件将数组值设置为 true,up 事件将数组值设置为 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
函数,但无法推断出它实际在做什么的任何模式。
我无法想象这是一个罕见的问题。有这方面经验的人可以提供您的建议吗?谢谢你。