Woher weiß ich, ob ein MotionEvent relativ oder absolut ist?
Frage
Ich implementiere OnTouchListener
und erhalte MotionEvent -Objekte. Etwas ACTION_MOVE
Ereignisse berichten von Absolute X/Y -Koordinaten, während einige relative Koordinaten.
Wie kann ich a fragen MotionEvent
Welche Art von Koordinaten repräsentiert es derzeit?
Lösung
Möglicherweise möchten Sie diese für absolute Koordinaten verwenden (absolut bezüglich des Bildschirms des Geräts):
Die anderen Methoden, getX()
und getY()
, sollten Sie zurückgeben, dass Sie im Verhältnis zur Koordination des Relativs zur View
das hat sie geschickt.
Andere Tipps
Dies ist eine Einschränkung der Android -Plattform.
MotionEvent
Gibt manchmal Absolute X- und Y -Koordinaten relativ zur Ansicht zurück und manchmal relative Koordinaten zum vorherigen Bewegungsereignis.
Ein Ereignis als als gesendet als als ACTION_DOWN
wird immer absolut sein, alle anderen Ereignisse variieren. Es gibt keine Möglichkeit, das zu fragen MotionEvent
Für die aktuelle Art der Koordinaten.
Das bedeutet das in der Praxis getX()
und getY()
sind für viele Anwendungsfälle nutzlos, und Sie sollten Ihre Anwendungslogik stützen getRawX()
und getRawY()
Dies wird garantiert absolute Koordinaten relativ zum Gerätebildschirm zurückgeben.
Bei der Verwendung der MapView konnte ich die relativen X- und Y -Koordinaten durch Subtrahieren der Ansicht.getleft () und view.gettop () der Inhaltsansicht des Fensters (window.id_android_content) aus der motionEvent.getrawx () und motionEvent abrufen. Getrawy ().
Die Lösung wird hier besprochen:
http://andmobidev.blogspot.com/2010/01/getting-relative-coordinates-from.html
Dies sollte zur Bestimmung der relativen X- und Y -Koordinaten in der Hauptlayoutansicht funktionieren.