Как получить экранные шнуры, соответствующие всему экрану, а не вид коснулся?
У меня есть некоторые проблемы с получением реального (x, y) с моего экрана, обрабатывая события касания одного элемента View.
У меня есть это:
![enter image description here]()
Когда я касаюсь элемента View, он дает мне координаты с началом, расположенным в его верхнем левом углу, и если я выталкиваю палец из вида, он дает мне отрицательные координаты (при сдвиге вверх или влево).
![enter image description here]()
![enter image description here]()
Я хотел бы получить местоположение View на экране, чтобы добавить его к координатам (x, y), которые я получаю, поэтому конечный результат состоит в том, что (0,0) находится в верхнем левом углу весь экран.
![enter image description here]()
Мне также нужен общий размер экрана, поэтому я знаю, когда палец расположен в нижнем правом углу.
Как я могу это достичь?
Спасибо.
Ответы
Ответ 1
Класс MotionEvent имеет методы getX()
и getY()
, которые возвращают координаты относительно представления, как вы обнаружили.
Однако он также имеет методы getRawX()
и getRawY()
, которые, согласно документам, говорят:
Возвращает исходную исходную X (или Y) координату этого события. Для сенсорных событий на экране это исходное местоположение события на экране, прежде чем оно будет настроено для содержащего окна и представлений.
Похоже, это то, что вам нужно.
Ответ 2
Попробуйте использовать это после просмотра, загруженного на экран.
int[] location = new int[2];
View.getLocationOnScreen(location);
Log.v(Common.TAG,"left: "+ location[0]);
Log.v(Common.TAG,"top: "+ location[1]);
Ответ 3
Получите расположение View
на экране, затем вы можете рассчитать остаток, используя просто арифметику.
Как получить абсолютные координаты представления