2009-09-11 18 views
32

Estoy implementando OnTouchListener y estoy recibiendo objetos MotionEvent. Algunos eventos ACTION_MOVE informan coordenadas X/Y absolutas, mientras que algunos informan las coordenadas relativas.¿Cómo puedo saber si un MotionEvent es relativo o absoluto?

¿Cómo puedo preguntarle a MotionEvent qué tipo de coordenadas representa en la actualidad?

Respuesta

60

Es posible que desee utilizar éstos para las coordenadas absolutas (absoluta, relativa a la pantalla del dispositivo):

MotionEvent.getRawX()

MotionEvent.getRawY()

Los otros métodos, getX() y getY(), que las coordenadas deben regresar relativo al View que los despachó.

+6

He resuelto mi problema usando dicho getRawX() y getRawY(). Sin embargo, considero que es una solución deprimente, ya que sugiere que getX() y getY() son inútiles, aunque parece que deberían ser los métodos primarios para la clase MotionEvent. DEBE haber una solución más elegante. – PeyloW

+1

Excelente, me salvaste un futuro dolor de cabeza. – Tom

+6

while (true) { System.out.println ("gracias"); } –

33

Esto es una limitación en la plataforma Android.

MotionEvent A veces devolverá las coordenadas absolutas X e Y en relación con la vista, y en ocasiones las coordenadas relativas al evento de movimiento anterior.

Un evento enviado como ACTION_DOWN siempre será absoluto, todos los demás eventos variarán. No hay forma de solicitar el MotionEvent para el tipo de coordenadas actual.

Esto significa que en la práctica getX() y getY() son inútiles para muchos casos de uso, y usted debe basar su lógica de la aplicación en getRawX() y getRawY() que está garantizado para devolver las coordenadas absolutas, relativas a la pantalla del dispositivo.

+3

¿Sigue siendo así? Estoy encontrando que getX y get trabajar muy bien para las coordenadas relativas ... – jjxtra

4

Al usar MapView, pude obtener las coordenadas X e Y relativas al restar View.getLeft() y View.getTop() de la vista de contenido de la ventana (Window.ID_ANDROID_CONTENT) de MotionEvent.getRawX () y MotionEvent.getRawY(), respectivamente.

La solución se discute aquí:

http://andmobidev.blogspot.com/2010/01/getting-relative-coordinates-from.html

Esto debería funcionar para la determinación relativa coordenadas X e Y en la vista principal de diseño.

Cuestiones relacionadas