보기에서 멀티 터치를 처리하는 Android 애플리케이션을 개발했습니다. 나는 기본적으로 ACTION_UP, ACTION_MOVE 같은 발생할 수있는 여러 MotionEvents을 추적, ... View 클래스에서 내 덮어 onTouch 방법은 다음과 같습니다 : 내 휴대 전화 (삼성 갤럭시 S)에Android 멀티 터치 : ACTION_UP이 항상 호출되지는 않습니까?
public boolean onTouch(View view, MotionEvent event)
{
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN) {
float x = event.getX();
handleTouchStart(view, x);
} else if (action == MotionEvent.ACTION_UP) {
float x = event.getX();
handleTouchEnded(view, x);
} else if (action == MotionEvent.ACTION_POINTER_DOWN) {
int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
float x = event.getX(pointer);
handleTouchStart(view, x);
} else if (action == MotionEvent.ACTION_POINTER_UP) {
int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
float x = event.getX(pointer);
handleTouchEnded(view, x);
} else if (action == MotionEvent.ACTION_MOVE) {
int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
float x = event.getX(pointer);
handleTouchMoved(view, x);
}
return true;
}
이 완벽하게 작동합니다. 모든 handleTouchStart()에 대해 적절한 handleTouchEnded()가 호출됩니다. 이것은 내 애플 리케이션을 위해 중요합니다. 화면의 왼쪽 하단에 조향 영역이있는 2D sidescroller입니다. 어떤 이유로 사용자가 터치 스크린에서 손가락을 떼었을 때 handleTouchEnded() 메서드가 호출되지 않으면 플레이어의 문자가 계속 실행됩니다.
다른 기기 (HTC Desire와 같은)의 플레이어로부터 드물게 화면의 조정 영역에서 손가락을 떼어도 실제로 방향이 계속 돌아가는보고를 받았습니다. 나는 handleTouchEnded()가 호출되지 않았고, ACTION_UP (또는 ACTION_POINTER_UP) 이벤트가 생성되지 않는다는 것을 의미하는 경우에만 이것이 발생할 수 있다고 결론을 내렸다.
멀티 터치 지원 장치 별 구현이 있습니까? 각 ACTION_DOWN (또는 ACTION_POINTER_DOWN) MotionEvent에 대해 적절한 ACTION_UP (또는 ACTION_POINTER_UP) MotionEvent가 호출된다는 보장이 있습니까? 또는 나는 무엇인가 놓치고 있냐? 내 onTouch 구현이 정확합니까?
더 넓은 질문 : '액션'게임을위한 멀티 터치 터치 스크린 입력을 처리하는 더 좋은 방법이 있습니까? 저는 기본적으로 게임 패드의 조향 십자의 좌우 컨트롤을 모방하고 있습니다. 나는 onPress 및 onRelease 이벤트를 추적 할 수 없기 때문에 Android의 UI 버튼이 충분한 유연성을 제공하지 않는다는 사실을 발견했습니다. 그렇지 않습니까?
우연히 발생하는 빈도를 알고 계십니까? –