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

StackOverflow https://stackoverflow.com/questions/1410885

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

MotionEvent.getRawX ()

MotionEvent.getRawY ()

Другие методы, 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 в главном виде компоновки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top