2012-08-06 21 views
15

Sto avendo qualche problema a ottenere il vero (x, y) dal mio schermo gestendo gli eventi di tocco di un elemento vista.Come ottenere le coordinate dello schermo corrispondenti all'intero schermo e non alla vista toccata?

ho questo:

enter image description here

Quando tocco il punto di vista, mi dà coordina con l'origine si trova nel suo angolo in alto a sinistra, e se far scorrere il dito fuori della vista, mi dà le coordinate negative (quando si fa scorrere verso l'alto o verso sinistra). enter image description here enter image description here

vorrei ottenere la posizione View nella schermata, per aggiungerlo alla (x, y) coordinate che ottengo, quindi il risultato finale è che il (0,0) è in angolo superiore sinistro dell'intero schermo. enter image description here

Ho anche bisogno della dimensione totale dello schermo, in modo da sapere quando il dito si trova nell'angolo in basso a destra.

Come posso ottenere questo risultato?

Grazie.

risposta

16

classe MotionEvent ha getX() e getY() metodi che restituiscono le coordinate relative alla vista, come avete scoperto.

Tuttavia ha anche getRawX() e getRawY() metodi, che secondo la documentazione dire:

rispedisce X grezzo (o Y) coordinata di questo evento. Per gli eventi di tocco sullo schermo, questa è la posizione originale dell'evento sullo schermo, prima che fosse stata regolata per la finestra e le viste di contenimento.

Suona come questo è quello che stai cercando.

+0

Questo è il modo più semplice, grazie per la risposta. – Alex

6

Provare a utilizzare questo dopo la visualizzazione caricata sullo schermo.

int[] location = new int[2]; 
View.getLocationOnScreen(location); 
Log.v(Common.TAG,"left: "+ location[0]); 
Log.v(Common.TAG,"top: "+ location[1]); 
Problemi correlati