손가락을 계속 누르고있을 때 멀티 터치 이벤트로 터치 색인이 해제되는 문제가 있습니다.Android 멀티 터치 이벤트 색인
내 Java 래퍼 코드가 아래에 붙여 넣어집니다. 이 함수는 activePointer 값을 배열 인덱스로 사용하여 배열에 위/아래 상태를 저장하는 C++ 함수에 activePointer 정수를 전달합니다. Down 이벤트는 배열 값을 true로 설정하고 up 이벤트는 배열 값을 false로 설정합니다. 다음
동작은 하나 개의 손가락이 가압
- 경우, 인덱스 0에 해당하는 터치.
- 손가락 두 개를 누르면 터치 인덱스 0과 1이 모두 참입니다.
- 그런 다음 두 번째 손가락이 제거되면 터치 인덱스 0은 true이고 터치 인덱스 1은 false입니다 (예상대로).
- 대신 첫 번째 손가락이 제거되고 두 번째 손가락이 계속 터치되는 경우 터치 색인 0과 1은 모두 거짓입니다. 터치 인덱스 0이 false가 될 것으로 예상하고 인덱스 1을 터치하면 여전히 true입니다.
이 내 자바 래퍼 코드 : 나는 문서 here을 읽고
@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
함수로 엉망이되었지만 실제로 무엇을했는지 패턴을 추론 할 수 없었다.
나는 이것이 드문 문제라고 상상할 수 없습니다. 이 경험이있는 사람이 조언을 해줄 수 있습니까? 고맙습니다.