Как узнать, является ли MotionEvent относительным или абсолютным?
Вопрос
Я реализую OnTouchListener
и получаю объекты MotionEvent. Некоторые события ACTION_MOVE
сообщают об абсолютных координатах X / Y, а некоторые сообщают об относительных координатах.
Как я могу спросить MotionEvent
, какие координаты он представляет в настоящее время?
Решение
Вы можете использовать их для абсолютных координат (абсолютных относительно экрана устройства):
Другие методы, getX ()
и getY ()
, должны возвращать ваши координаты относительно View
, который их отправил. р>
Другие советы
Это ограничение на платформе Android.
MotionEvent
иногда возвращает абсолютные координаты X и Y относительно вида, а иногда относительные координаты к предыдущему событию движения.
Событие, отправленное как ACTION_DOWN
, всегда будет абсолютным, все остальные события будут разными. Невозможно запросить у MotionEvent
текущий тип координат.
Это означает, что на практике getX ()
и getY ()
во многих случаях бесполезны, и вы должны основывать логику приложения на getRawX ()
и getRawY ()
, которые гарантированно возвращают абсолютные координаты относительно экрана устройства.
При использовании 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 в главном виде компоновки.