Как узнать, является ли MotionEvent относительным или абсолютным?

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

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

Solutions Collecting From Web of "Как узнать, является ли MotionEvent относительным или абсолютным?"

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

MotionEvent.getRawX ()

MotionEvent.getRawY ()

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

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

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

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

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

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

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

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

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