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


7

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

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

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

  0

У меня такая же проблема, вы нашли ответ? 26 июл. 112011-07-26 11:11:03

  0

Извините, я изначально собирался использовать этот метод для специального интерфейса, который я делал. Я закончил тем, что отказался от этой идеи и пошел с другим. Мне все равно хотелось бы узнать, есть ли у кого-то ответ на этот вопрос. 27 июл. 112011-07-27 00:39:39

  0

Спасибо Aerodroid, у вас есть предложения для этого nw, потому что мне нужно реализовать это любым другим способом. 27 июл. 112011-07-27 04:54:37

  0

Ну, моя оригинальная идея интерфейса заключалась в обнаружении каких-то жестов, но после стольких разочарований в том, что вы не смогли найти рабочее решение, я прибегал к созданию интерфейса, использующего краны вместо прокрутки. 27 июл. 112011-07-27 05:06:50

  0

Я видел приложение на рынке, я думаю, что он имеет эту функциональность. обратитесь пожалуйста. https://market.android.com/details?id=mobi.conduction.swipepad.android 27 июл. 112011-07-27 07:31:11

  0

Да, это почти одно из тех же приложений, с которых я пытался получить свою идею. Я закончил тем, что думал, что я должен создать интерфейс, который использует краны вместо проверок. Похоже, что такие приложения, как SwipePad, используют некоторые довольно умные методы, которые я не могу найти или найти. Я могу понять ваше разочарование. :( 27 июл. 112011-07-27 17:45:16

  0

ya спасибо aero, и я дам вам знать, если я сделаю это с хорошим решением. 28 июл. 112011-07-28 05:02:01

  0

Пожалуйста, сделайте это, я все равно хотел бы посмотреть, как это делается, несмотря на то, что я не смог понять это. 28 июл. 112011-07-28 17:48:25

  0

@Brian: Ничего себе, это именно то, что я пытался сделать. Так же, как и вы, я пытаюсь реализовать что-то, чтобы получить информацию об ударе с наложением, в то же время позволяя событию проходить через мой активность/обслуживание к базовому виду. Невозможно найти гнездо на любых возможностях, хотя ... 31 янв. 122012-01-31 17:52:36

  0

Я пытаюсь реализовать одно и то же, кто-нибудь это понял? 17 янв. 182018-01-17 07:19:09

  0

Моя первоначальная цель с этим вопросом состояла в том, чтобы реализовать системный оверлей View (аналогично Messenger ChatHeads). Если это то, чего вы пытаетесь достичь, взгляните на это: https://gist.github.com/bjoernQ/6975256 17 янв. 182018-01-17 19:19:36

6

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

  • Окно, которое может принимать все события, которые будут поступать на него или любые окна за ним (без разрешения этих событий, которые будут получены за его окнами). Это называется «touch modal».
  • Окно, которое может принимать все события в пределах своего прямоугольника, не позволяя им заходить в окна позади него, но события за пределами прямоугольника позволяют перейти к соответствующему окну за ним, не будучи замеченным им. Это называется «not touch modal».
  • Вариант «not touch modal», который позволяет ему рассказывать только о событии down, которое происходит за пределами его окна. Он не будет принимать какие-либо другие дополнительные события, однако, и поставляется в виде специального кода действия: 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

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