2012-08-06 6 views
15

Mam pewne problemy z uzyskaniem rzeczywistego (x, y) z mojego ekranu poprzez obsługę zdarzeń dotykowych jednego elementu widoku.Jak uzyskać współrzędne ekranu odpowiadające całemu ekranowi, a nie widokowi dotkniętemu?

mam to:

enter image description here

Kiedy dotykać elementu widoku, to daje mi współrzędne z pochodzenia znajduje się w jego lewym górnym rogu, a jeśli i przesuń palec na widoku, to daje mi ujemne współrzędne (przy przesuwaniu w górę lub w lewo). enter image description here enter image description here

chciałbym uzyskać Zobacz lokalizację na ekranie, aby dodać go do (x, y) współrzędne że ja dostać, więc końcowy wynik jest taki, że (0,0) znajduje się w lewy górny róg całego ekranu. enter image description here

Potrzebuję również całkowitego rozmiaru ekranu, dzięki czemu wiem, kiedy palec znajduje się w prawym dolnym rogu.

Jak mogę to osiągnąć?

Dzięki.

Odpowiedz

16

klasa MotionEvent ma getX() i getY() metod, które zwracają współrzędnych w stosunku do widzenia, jak to odkryli.

Jednak również getRawX() i getRawY() metody, która według Dokumenty znaczy:

Zwraca nieprzetworzone X (lub Y), współrzędna zdarzenia. W przypadku zdarzeń dotykowych na ekranie jest to pierwotna lokalizacja zdarzenia na ekranie, zanim została dostosowana do okna zawierającego i widoków.

Wygląda na to, że tak właśnie chcesz.

+0

To jest najłatwiejszy sposób niż odpowiedź. – Alex

6

Spróbuj użyć tego widoku po załadowaniu na ekranie.

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