В Android большинство методов прослушивателя событий возвращают логическое значение. Что означает это истинное / ложное значение? к чему это приведет к событиям подпоследовательности?
class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
logView.showEvent(event);
return true;
}
}
Что касается приведенного выше примера, если return true в методе onTouch , я обнаружил, что каждое событие касания (DOWN, UP, MOVE и т.д.) было зафиксировано в соответствии с моим logView . Напротив, если return false, одно событие DOWN было захвачено. Похоже, что return false предотвратит распространение события. Я прав ?
Более того, в OnGestureListener многие методы также должны возвращать логическое значение. Имеют ли они то же значение?
Из документации: http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View , android.view.MotionEvent)
«Истина, если слушатель принял событие, в противном случае - ложь».
Если вы вернете true, событие будет обработано. Если false, переход на следующий уровень ниже.
источник
Логическое значение определяет, будет ли событие использовано или нет.
Да ты прав. Если вы вернете false, следующий слушатель обработает событие. Если он возвращает истину, событие обрабатывается вашим слушателем и не отправляется следующему методу.
источник
true
означает, что вы использовали событие и хотите, чтобы остальные события были в жесте - другие слушатели / представления не получат события.false
означает позволить кому-то другому обработать событие. На самом деле это немного более конкретно, чем это; увидеть мой ответ.Все приведенные выше ответы верны, но результат отличается, если вид
clickable
или нетclickable
Например , у меня есть
LinearLayout
1Button
и 1,TextView
как этоВ Activity у меня есть код вроде
Случай 1
Linear onTouch return **FALSE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Нажмите кнопку
Нажмите на TextView
Щелкните LinearLayout
Случай 2
Linear onTouch return **FALSE**
,Button onTouch return **TRUE**
,TextView onTouch return **TRUE**
Нажмите кнопку
Нажмите на TextView
Щелкните LinearLayout
Случай 3
Linear onTouch return **TRUE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Нажмите кнопку
Нажмите на TextView
Щелкните LinearLayout
Заметка
TextView
этоnot clickable
, он станет интерактивным , если положитьandroid:clickable="true"
в XML или когда мы устанавливаемtextView.setOnClickListener(...)
event MOVE
может вызывать больше, чем мой журнал (это зависит от того, как вы нажимаете)Резюме
onTouch
возвратtrue
или просмотрclickable
, просмотр получит всеonTouchEvent
onTouch
returnfalse
и view нетclickable
, view не получит NEXT onTouchEvent (его родитель может получить)Надеюсь, это поможет
DEMO
источник
Я потерял почти один день на устранение неполадок, но я обнаружил, что моя функция onTouch вызывается 2 раза при использовании true и 1 раз при использовании false.
источник
event.getAction()
потому что, если вы вернетесьfalse
к событию ACTION_DOWN, событие ACTION_UP игнорируется слушателемИз документа Android :
Примечание: Android сначала вызовет обработчики событий, а затем соответствующие обработчики по умолчанию из определения класса. Таким образом, возвращение истины от этих прослушивателей событий остановит распространение события на другие прослушиватели событий, а также заблокирует обратный вызов обработчику событий по умолчанию в представлении. Поэтому убедитесь, что вы хотите прекратить событие, когда вернете true.
источник