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

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

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

Введите описание изображения здесь

Когда я касаюсь элемента View, он дает мне координаты с началом, расположенным в его верхнем левом углу, и если я выталкиваю палец из вида, он дает мне отрицательные координаты (при сдвиге вверх или влево). Введите описание изображения здесьВведите описание изображения здесь

Я хотел бы получить местоположение View на экране, чтобы добавить его к координатам (x, y), которые я получаю, поэтому конечный результат состоит в том, что (0,0) находится в верхнем левом углу всего экрана , Введите описание изображения здесь

Мне также нужен общий размер экрана, так что я знаю, когда палец расположен в нижнем правом углу.

Как я могу это достичь?

Благодарю.

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

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

Однако он также имеет getRawX() и getRawY() , которые, согласно документам, говорят:

Возвращает исходную исходную X (или Y) координату этого события. Для событий касания на экране это исходное местоположение события на экране, прежде чем оно будет скорректировано для содержащего окна и представлений.

Похоже, это то, что вам нужно.

Попробуйте использовать это после просмотра, загруженного на экран.

 int[] location = new int[2]; View.getLocationOnScreen(location); Log.v(Common.TAG,"left: "+ location[0]); Log.v(Common.TAG,"top: "+ location[1]); 

Получите представление View на экране, затем вы можете рассчитать остаток, используя просто арифметику. Как получить абсолютные координаты вида