2009-09-11 19 views
32

Sto implementando OnTouchListener e sto ricevendo oggetti MotionEvent. Alcuni eventi ACTION_MOVE riportano le coordinate X/Y assolute, mentre alcuni riportano le coordinate relative.Come faccio a sapere se MotionEvent è relativo o assoluto?

Come posso chiedere a MotionEvent che tipo di coordinate attualmente rappresenta?

risposta

60

Si consiglia di utilizzare questi per le coordinate assolute (assoluto, per quanto riguarda lo schermo del dispositivo):

MotionEvent.getRawX()

MotionEvent.getRawY()

Gli altri metodi, getX() e getY(), dovrebbe restituire voi coordinate relativo allo View che li ha inviati.

+6

Ho risolto il mio problema utilizzando said getRawX() e getRawY(). Tuttavia, ritengo che sia una soluzione deprimente in quanto suggerisce che getX() e getY() sono inutili, anche se sembra che dovrebbero essere i metodi dei primati per la classe MotionEvent. Deve esserci una soluzione più elegante. – PeyloW

+1

Eccellente, mi hai salvato un mal di testa futuro. – Tom

+6

While (true) { System.out.println ("thanks"); } –

33

Questa è una limitazione sulla piattaforma Android.

MotionEvent restituisce a volte coordinate X e Y assolute relative alla vista e, a volte, le coordinate relative all'evento di movimento precedente.

Un evento inviato come ACTION_DOWN sarà sempre assoluto, tutti gli altri eventi varieranno. Non è possibile chiedere allo MotionEvent il tipo corrente di coordinate.

Ciò significa che, in pratica getX() e getY() sono inutili per molti casi d'uso, e si dovrebbe basare la logica applicazione su getRawX() e getRawY() che è garantito per tornare coordinate assolute, rispetto allo schermo del dispositivo.

+3

È ancora così? Sto trovando getX un getY per funzionare bene per le coordinate relative ... – jjxtra

4

Quando si utilizza il MapView, ho potuto ottenere le relative coordinate X e Y sottraendo il View.getLeft() e View.getTop() di vista del contenuto della finestra (Window.ID_ANDROID_CONTENT) dal MotionEvent.getRawX () e MotionEvent.getRawY(), rispettivamente.

La soluzione è discusso qui:

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

Questo dovrebbe funzionare per determinare relative coordinate X e Y nella vista di estensione principale.

Problemi correlati