Как найти элемент в режиме просмотра по координатам x, y Android

Если я знаю координаты (X, Y) пикселей (методом OnTouchEvent и getX (), getY), как я могу найти элемент ex. Кнопка или текст и т. Д., Используя X, Y

Вы можете использовать getHitRect(outRect) каждого дочернего вида и проверить, находится ли точка в полученном прямоугольнике. Вот быстрый пример.

 for(int _numChildren = getChildCount(); --_numChildren) { View _child = getChildAt(_numChildren); Rect _bounds = new Rect(); _child.getHitRect(_bounds); if (_bounds.contains(x, y) // In View = true!!! } 

Надеюсь это поможет,

FuzzicalLogic

Несколько более полный ответ, который принимает любую ViewGroup и будет рекурсивно искать представление при заданных x, y.

 private View findViewAt(ViewGroup viewGroup, int x, int y) { for(int i = 0; i < viewGroup.getChildCount(); i++) { View child = viewGroup.getChildAt(i); if (child instanceof ViewGroup) { View foundView = findViewAt((ViewGroup) child, x, y); if (foundView != null && foundView.isShown()) { return foundView; } } else { int[] location = new int[2]; child.getLocationOnScreen(location); Rect rect = new Rect(location[0], location[1], location[0] + child.getWidth(), location[1] + child.getHeight()); if (rect.contains(x, y)) { return child; } } } return null; } 

Android использует dispatchKeyEvent / dispatchTouchEvent, чтобы найти правильный вид для обработки события key / touch, это сложная процедура. Поскольку может быть много видов, охватывающих точку (x, y).

Но это просто, если вы просто хотите найти самое верхнее представление, которое покрывает точку (x, y).

1 Используйте getLocationOnScreen (), чтобы получить позицию absoulte.

2 Используйте getWidth (), getHeight (), чтобы выяснить, охватывает ли представление точку (x, y).

3 Сбросьте уровень просмотра в дереве всего представления. (Вызывайте getParent () рекурсивно или используйте какой-либо метод поиска)

4 Найдите представление, которое покрывает точку и имеет самый большой уровень.