2011-11-03 1 views
3

나는 안드로이드 API 레벨 11 (ICS) MotionEvent에서 transform 방법이 인 방법을 발견했습니다. 이것은 실제로 제가 좀 더 깔끔하게하는 것을 만들지 만, 레벨 8을 코딩하고 있습니다.Android API 레벨 8 또는 9에서 MotionEvent.transform (Matrix)을 시뮬레이션하는 방법은 무엇입니까?

이전 버전의 Android에서 작동하는 편리한 대체품 MotionEvent.transform()이 있습니까? 나는 과거와 다중 터치 좌표를 모두 변형시키고 싶습니다. 상대 좌표와 절대 좌표의 구분을 올바르게 처리하고 싶습니다.이 좌표는 일종의 까다로운 항목입니다.

MotionEventMotionEvent의 변형 사본 인 경우 MotionEvent을 만들 수 있는지 알고 싶습니다. 실제로 임의의 변형은 필요하지 않지만 변환 및 확장이 가능해야합니다. 나는 offsetLocation으로 번역 할 수 있다고 믿지만, (레벨 11 이전에) MotionEvent을 측정 할 방법이 전혀 없습니다. 특히 멀티 터치 이벤트의 좌표를 어떻게 변환 할 수 있습니까? obtain 메서드는 배열이 아니라 단일 (x, y) 쌍을 취합니다.

이유는 내가 "자식"개체 집합에 이벤트를 발송하는 하나의 개체가 있습니다. 지금은 각 어린이들이 일종의 임시 방편으로 좌표를 변형합니다. 그러나 부모 (발송자)는 수행해야 할 변형이 무엇인지 알고 있으므로 자식에게 전달하기 전에 MotionEvent (또는 사본)을 변형하는 것이 훨씬 더 명확합니다. 또는 MotionEvent을 래핑하거나 데이터를 복사하여 MotionEvent에서 변형하는 자체 클래스를 만들 수도 있지만 MotionEvent을 사용할 수 있다면 훨씬 간단합니다.

+0

당신이 할 수있는 일은 직접 변환을 계산하는 것입니다. Matrix 클래스를 사용하면 간단합니다. –

+0

@aleph_null 예, 실제로 'MotionEvent'에 변환 된 좌표를 채울 수 있습니까? 한 쌍의 (x, y) 좌표를 더 설정할 방법이 없습니다. 멀티 터치 이벤트를 변환하려면 어떻게해야합니까? –

+0

잘 모르겠지만 MotionEvent.obtain 및 여러 addBatch 호출을 사용하여 MotionEvent를 만들 수 있습니다. x, y 좌표의 각 집합을 독립적으로 변환합니다. –

답변

3

내가 말할 수있는 한 최선책은 "아니오"입니다. 안드로이드의 허니컴 버전 이전 버전의 MotionEvent에서 첫 번째 포인터가 아닌 다른 포인터의 좌표를 조작하는 방법은 없습니다.

필자가 생각해 낸 해결 방법은 내 랩퍼 클래스 (TouchEvent)를 만들고 onTouch을 위임 할 때 MotionEvent 대신이 값을 사용하는 것입니다. 일부 표준 인터페이스를 구현하는 경우에는 작동하지 않지만 제 경우에는 위임자 인터페이스를 제어하므로이 솔루션이 제대로 작동합니다.