Как узнать, является ли MotionEvent относительным или абсолютным? - PullRequest
34 голосов
/ 11 сентября 2009

Я реализую OnTouchListener и получаю объекты MotionEvent. Некоторые события ACTION_MOVE сообщают абсолютные координаты X / Y, а некоторые сообщают относительные координаты.

Как я могу спросить MotionEvent, какие координаты он в настоящее время представляет?

Ответы [ 3 ]

67 голосов
/ 12 сентября 2009

Вы можете использовать их для абсолютных координат (абсолютных относительно экрана устройства):

MotionEvent.getRawX ()

MotionEvent.getRawY ()

Другие методы, getX() и getY(), должны возвращать вам координаты относительно View, который их отправил.

36 голосов
/ 17 сентября 2009

Это ограничение на платформе Android.

MotionEvent иногда возвращает абсолютные координаты X и Y относительно вида, а иногда относительные координаты к предыдущему событию движения.

Событие, отправленное как ACTION_DOWN, всегда будет абсолютным, все остальные события будут отличаться. Нет способа спросить у MotionEvent текущий тип координат.

Это означает, что на практике getX() и getY() бесполезны для многих случаев использования, и вы должны основывать логику приложения на getRawX() и getRawY(), которые гарантированно возвращают абсолютные координаты относительно экрана устройства .

4 голосов
/ 06 января 2010

При использовании MapView я смог получить относительные координаты X и Y, вычтя View.getLeft () и View.getTop () представления содержимого окна (Window.ID_ANDROID_CONTENT) из MotionEvent.getRawX () и MotionEvent.getRawY () соответственно.

Решение обсуждается здесь:

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

Это должно работать для определения относительных координат X и Y в главном виде компоновки.

...