Рассмотрим эту гипотетическую иерархию...
LinearLayoutA <-- I want to handle the touches here...
|
+-SomeViewX
+-SomeOtherViewY
+-LinearLayoutB
|
+-CustomView1 <-- for these three CustomView objects
+-CustomView2
+-CustomView3
Что я хотел бы сделать, так это узнать, какой (большой) дочерний вид был затронут, и обработать его из LinearLayoutA. Кроме того, я не контролирую эти представления, поэтому я не могу просто заставить их обрабатывать прикосновения внутри и делегировать их родителям.
В настоящее время я вручную добавляю сенсорные прослушиватели в CustomViews 1-3, но это требует большой «шаблонной» работы, а также означает, что я не буду получать уведомления, если кто-то нажимает на SomeViewX или SomeOtherViewY, только те, которые я прикрепил к слушателю. к.
Теперь в других языках, таких как C # с WPF, если вы обрабатываете событие в эквиваленте LinearLayoutA, часть полезной нагрузки события является источником, то есть представлением, которое инициировало прикосновение, но я не знаю ничего подобного в Андроид.
Все примеры, которые я видел, требуют циклического прохождения дочерних элементов и их проверки на попадание, а затем устранения неоднозначности по z-порядку, если есть перекрытие, и когда вы идентифицировали один дочерний элемент, вам нужно пройти через его дочерние элементы и повторить.
Итак, существует ли встроенный или «Androidy» способ узнать, какой дочерний элемент в ViewGroup был затронут без ручного повторения и проверки на попадание или ручного присоединения слушателей ко всем его дочерним элементам?
View
в качестве параметра, поэтому вы можете использовать один и тот же прослушиватель для всех трех объектов и узнать, какой из них был поражен, посмотрев на аргумент. Однако это по-прежнему требует ручного подключения одного прослушивателя. - person Elan Hamburger   schedule 20.07.2017OnTouchListener
должно сделать это относительно безболезненным. - person Elan Hamburger   schedule 20.07.2017