Intereting Posts
Кинжал 2 не действует Ошибка IDEA 12 «Невозможно перезагрузить список AVD: анализ ошибок /tools/lib/devices.xml»? Распознавание активности не работает после того, как «Wi-Fi и местоположение мобильной сети» выключится и включится Рисование текста на холсте Установите программный код Android IP, DNS, GATEWAY Как правильно вывести jstring в цикле? Конфигурация сети эмулятора Android Как безопасно проверять разрешение Android в динамическом режиме ListView setOnItemClickListener не запускается, когда элемент имеет ссылку в нем Если я назову getMeasuredWidth () или getWidth () для макета в onResume, они возвращают 0 Есть ли хорошие ORM (желательно JPA-реализации), поддерживающие SQLite (на Android)? Ошибка: попытка запросить уже закрытый курсор Android TableLayout с различной шириной столбца в строке Невозможно добавить buildConfigField в productFlavors Двойной восклицательный знак в EditText setError при использовании в поле типа пароля

Как найти элемент в режиме просмотра по координатам 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 Найдите представление, которое покрывает точку и имеет самый большой уровень.