2014-02-05 1 views
6

Я создаю игру, для которой требуется SurfaceView для реализации OnTouchListener. Во время игры я хочу приостановить прослушиватель в течение определенного времени. Я попытался вернуть false из метода onTouch(), но все же метод продолжает выполнение. Есть ли другой способ приостановить прослушивание на какое-то время? И кто-нибудь, пожалуйста, объясните, что означает возвращение false от onTouch()?Что на самом деле происходит, если я возвращаю false в OnTouchListener?

ответ

12

От View documentation:

Returns 
True if the listener has consumed the event, false otherwise. 

Если вы вернетесь true вы говорите андроид, что пресса позаботятся. Забудь это.

Если вы вернетесь false, вы в основном говорите: «Не моя проблема, кому-то придется позаботиться об этом клике». Затем андроид передаст событие вниз к другим представлениям, которые могут быть под вашим видом.

0

Вы должны отменить регистрацию своей реализации. Вы можете сделать это, указав null в качестве параметра. Установите его снова, когда закончится режим паузы. Если вы return true, событие касания не будет передано другим возможным представлениям.

3

Если вы вернетесь, вы сигнализируете системе, что вы потребляли событие, как показано на рисунке documentation. Это означает, что другие представления, которые также имеют touchlistener, не получат это событие для обработки. Если вы вернете false, событие будет передано родительским представлениям для обработки.

Например, если у вас есть ListView, встроенный в Viewpager, Listview является первым представлением, которое может обрабатывать touchhevent. Если это горизонтальное прокручивание, событие не будет обрабатываться через listview, и viewpager сможет обрабатывать салфетки.

Смежные вопросы