Получение представления, которое получает все события касания

У меня есть оверлей системы, который находится выше всех Activities и Windows . Единственная проблема заключается в том, что он может только обнаруживать MotionEvents когда пользователь помещает его / ее вниз на экран (он не может отслеживать движения пальца или обнаруживает, когда палец поднят). В качестве возможного решения я реализовал второе представление (я буду называть его просмотром отслеживания), которое может обрабатывать все события касания, но остается скрытым до тех пор, пока осязание системы не обнаружит касание в нужном месте; В этом случае он отобразит представление отслеживания. Единственная проблема заключается в том, что представление отслеживания не начинает обнаруживать события касания, пока пользователь не отложит его / ее палец на экране. Поэтому, чтобы разрешить это, я хочу перехватить представление, которое получает сенсорные события (это представление под оверлей системы) и пересылает все его события касания к просмотру отслеживания для обработки.

Кто-нибудь знает, как я могу получить представление, которое получает все события касания и перенаправляет все события касания, которые он получает?

Этот вопрос относится к примерам, используемым в этом вопросе .

Вы не можете делать то, что вы просите. Система ввода очень осторожно ограничивает, какие окна могут получать какие события; Он намеренно не похож на другие системы, такие как Microsoft Windows, где вы можете участвовать в диспетчеризации событий низкого уровня и видеть все происходящее. Единственное, что разрешено:

  • Окно, которое может принимать все события, которые будут поступать на него или любые окна за ним (без разрешения этих событий, которые будут получены за окнами за ним). Это называется «touch modal».
  • Окно, которое может принимать все события в пределах своего прямоугольника, не позволяя им заходить в окна за ним, но события за пределами прямоугольника позволяют перейти в соответствующее окно позади него, не просматривая его. Это называется «не трогательным модальным».
  • Вариант «not touch modal», который позволяет ему рассказывать только о нижнем событии, которое происходит за пределами его окна. Однако он не получит никаких других дополнительных событий и поставляется в виде специального кода действия: http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_OUTSIDE

Следующим основным правилом диспетчеризации событий для окон является то, что после выбора окна в качестве объекта события касания он будет продолжать получать поток событий до окончательного завершения. Традиционно в Android это применимо ко всем дополнительным пальцам сенсорного жеста (он получает все пальцы, независимо от того, где они появляются, до тех пор, пока последний палец не повысится). Более поздние версии платформы позволяют изменять это поведение, чтобы быть осведомленным о нескольких контактах: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SPLIT_TOUCH

Итак, это инструменты, которые у вас есть в вашем ящике. Вы можете строить вещи, которые возможны с ними, но это не предназначено, чтобы позволить вам делать любое возможное взаимодействие с системой событий, поэтому будут ограничения.