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

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

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


person PeyloW    schedule 11.09.2009    source источник


Ответы (3)


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

MotionEvent.getRawX()

MotionEvent.getRawY()

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

person Dimitar Dimitrov    schedule 12.09.2009
comment
Я решил свою проблему, используя указанные getRawX() и getRawY(). Однако я нахожу это решение удручающим, поскольку оно предполагает, что getX() и getY() бесполезны, хотя кажется, что они должны быть методами приматов для класса MotionEvent. ДОЛЖНО быть более элегантное решение. - person PeyloW; 13.09.2009
comment
Отлично, вы избавили меня от головной боли в будущем. - person Tom; 08.06.2011
comment
Peylow - motionEvent.getRawX() возвращает только абсолютные координаты внутри представления. Он НЕ будет возвращать координаты вне представления. Чтобы получить координаты за пределами представления, необходимо добавить абсолютные координаты события ACTION_DOWN к относительным координатам соответствующих событий ACTION_MOVE или ACTION_UP MotionEvents. - person Ian; 31.08.2017

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

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

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

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

person PeyloW    schedule 17.09.2009
comment
Это все еще так? Я считаю, что getX и getY отлично работают для относительных координат... - person jjxtra; 28.06.2015

При использовании 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 в основном виде компоновки.

person dyerjo    schedule 06.01.2010