Comment savoir si MotionEvent est relatif ou absolu?
Question
J'implémente OnTouchListener
et je reçois des objets MotionEvent. Certains événements ACTION_MOVE
indiquent les coordonnées X / Y absolues, tandis que certains indiquent les coordonnées relatives.
Comment demander à un MotionEvent
quel type de coordonnées il représente actuellement?
La solution
Vous pouvez utiliser ces valeurs pour les coordonnées absolues (absolues, en ce qui concerne l'écran de l'appareil):
Les autres méthodes, getX ()
et getY ()
, devraient vous renvoyer des coordonnées relatives à la Vue
qui les a envoyées.
Autres conseils
Il s'agit d'une limitation de la plate-forme Android.
MotionEvent
renvoie parfois les coordonnées absolues X et Y relatives à la vue, et parfois les coordonnées relatives à l'événement de mouvement précédent.
Un événement envoyé en tant que ACTION_DOWN
sera toujours absolu, tous les autres événements varieront. Il n’existe aucun moyen de demander à MotionEvent
le type de coordonnées actuel.
Cela signifie qu'en pratique, getX ()
et getY ()
sont inutiles dans de nombreux cas d'utilisation et vous devez baser votre logique d'application sur getRawX ().
et getRawY ()
garantit de renvoyer des coordonnées absolues par rapport à l'écran du périphérique.
Lors de l'utilisation de MapView, j'ai pu obtenir les coordonnées relatives X et Y en soustrayant les View.getLeft () et View.getTop () de la vue du contenu de la fenêtre (Window.ID_ANDROID_CONTENT) de MotionEvent.getRawX (). et MotionEvent.getRawY (), respectivement.
La solution est discutée ici:
http://andmobidev.blogspot.com/2010/01/getting-relative-coordinates-from.html
Cela devrait fonctionner pour déterminer les coordonnées X et Y relatives dans la vue de présentation principale.