Как получить экранные шнуры, соответствующие всему экрану, а не вид коснулся?

У меня есть некоторые проблемы с получением реального (x, y) с моего экрана, обрабатывая события касания одного элемента View.

У меня есть это:

enter image description here

Когда я касаюсь элемента View, он дает мне координаты с началом, расположенным в его верхнем левом углу, и если я выталкиваю палец из вида, он дает мне отрицательные координаты (при сдвиге вверх или влево). enter image description hereenter 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]);