No Android, a maioria dos métodos de ouvinte de evento retorna um valor booleano. O que significa esse valor verdadeiro / falso? no que isso resultará nos eventos subsequentes?
class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
logView.showEvent(event);
return true;
}
}
Em relação ao exemplo acima, se retornar verdadeiro no método onTouch , descobri que todos os eventos de toque (DOWN, UP, MOVE, etc) foram capturados de acordo com meu logView . Ao contrário, se retornar falso, apenas o evento DOWN foi capturado. Portanto, parece que o retorno falso impedirá a propagação do evento. Estou correcto ?
Além disso, em um OnGestureListener , muitos métodos também precisam retornar um valor booleano. Eles têm o mesmo significado?
Da documentação: http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View , android.view.MotionEvent)
"Verdadeiro se o ouvinte consumiu o evento, falso caso contrário."
Se você retornar verdadeiro, o evento será processado. Se for falso, ele irá para a próxima camada abaixo.
fonte
O valor booleano determina se o evento é consumido ou não.
Sim, você está correto. Se você retornar falso, o próximo ouvinte tratará do evento. Se retornar verdadeiro, o evento é consumido por seu ouvinte e não é enviado para o próximo método.
fonte
true
significa que você consumiu o evento e deseja o restante dos eventos no gesto - outros ouvintes / visualizações não receberão os eventos.false
significa deixar outra pessoa cuidar do evento. Na verdade, é um pouco mais específico do que isso; veja minha resposta.Todas as respostas acima estão corretas, mas o resultado é diferente se a visão é
clickable
ou nãoclickable
Exemplo , eu tenho um
LinearLayout
contém 1Button
e 1TextView
como esteEm Activity, tenho um código como
Caso 1
Linear onTouch return **FALSE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Clique no botão
Clique em TextView
Clique em LinearLayout
Caso 2
Linear onTouch return **FALSE**
,Button onTouch return **TRUE**
,TextView onTouch return **TRUE**
Clique no botão
Clique em TextView
Clique em LinearLayout
Caso 3
Linear onTouch return **TRUE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Clique no botão
Clique em TextView
Clique em LinearLayout
Nota
TextView
énot clickable
, ele se tornará clicável se definirmosandroid:clickable="true"
em xml OU quando definirmostextView.setOnClickListener(...)
event MOVE
pode chamar mais do que meu log (baseado em como você toca)Resumo
onTouch
retornartrue
ou visualizar éclickable
, Visualizar receberá todosonTouchEvent
onTouch
returnfalse
and view não éclickable
, view não receberá PRÓXIMO onTouchEvent (seu pai pode recebê-lo)Espero que ajude
DEMO
fonte
Perdi quase um dia na solução de problemas, mas descobri que minha função onTouch é chamada 2 vezes quando uso true e 1 vez quando uso false.
fonte
event.getAction()
porque se você retornarfalse
no evento ACTION_DOWN, o evento ACTION_UP será ignorado pelo listenerDo documento Android :
Nota: o Android chamará os manipuladores de eventos primeiro e, em seguida, os manipuladores padrão apropriados da definição de classe. Como tal, retornar true a partir desses ouvintes de eventos interromperá a propagação do evento para outros ouvintes de eventos e também bloqueará o retorno de chamada para o manipulador de eventos padrão na Visualização. Portanto, certifique-se de que deseja encerrar o evento quando retornar verdadeiro.
fonte