我遇到了多點觸控事件導致觸摸索引在手指仍被按下時釋放的問題。Android多點觸控事件索引
我的Java包裝代碼粘貼在下面。該函數將activePointer整數傳遞給一個C++函數,該函數將數組中的up/down狀態存儲在數組中,並使用activePointer值作爲數組索引。向下事件將數組值設置爲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;
}
我已經閱讀文檔here,但它也不是很清楚。
我搞砸了event.findPointerIndex
函數,但無法推斷出它實際正在做的任何模式。
我無法想象這是一個罕見的問題。有經驗的人可以提供你的建議嗎?謝謝。