Estou me preparando para a entrevista recentemente. Revi muito. Use o vernáculo mais simples para expressar os novos pontos de conhecimento aprendidos com o passado. Um é registrar. Em segundo lugar, se pode ajudar a todos, melhor
1. Três métodos importantes de distribuição de eventos
Primeiro de tudo, eu construí aleatoriamente um ViewGroup, os três métodos importantes são
- dispatchTouchEvent
- onInterceptTouchEvent
- onTouchEvent
public class MyViewGroup extends ViewGroup {
//...省略部分代码
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
Em seguida, dê uma breve descrição desses 3 métodos
método | efeito | Duração da chamada |
---|---|---|
dispathTouchEvent () | Distribuir (entregar) eventos de clique | Quando o evento click puder ser passado para a View atual, o método será chamado |
onInterceptTouchEvent () | Determine se um evento é interceptado (somente no ViewGroup, o View normal não possui este método) | Chamado dentro de dispathTouchEvent () |
onTouchEvent () | Tratamento de eventos de clique | Chamado dentro de dispathTouchEvent () |
A ordem de distribuição do evento é Activity (Window) -> ViewGroup -> View
2. Amplie a movimentação e analise o processo de distribuição de eventos.
Na foto:
- super: chame o método pai
- verdadeiro: evento de consumo, ou seja, o evento não continua a passar
- false: o evento não é consumido e não continua a ser transmitido / entregue ao controle pai onTouchEvent () para processamento
Observe a figura acima e a análise é a seguinte. Existem 3 etapas no total:
Etapa 1 (na atividade):
O evento dispatchTouchEvent () em Atividade
retorna o valor:
verdadeiro / falso -------> evento de consumo (aqui falso também é evento de consumo)
super -------------> evento é emitido Vá para ViewGroup e chame dispatchTouchEvent () de ViewGroup
Etapa 2 (no ViewGroup)
O
valor de retorno dispatchTouchEvent () do evento no ViewGroup :
true --------------> Consumption event
false -------------> Nenhum evento é consumido, não mais Envie-o para onTouchEvent () do controle pai para lidar com
super -------------> O evento é enviado para onInterceptTouchEvent () do ViewGroup atual
O
valor de retorno do evento onInterceptTouchEvent () no ViewGroup :
true --------------> O evento é entregue ao onTouchEvent () do ViewGroup atual.
False / super -----> O evento é entregue a Visão filha, chame dispatchTouchEvent () da visão filha
O
valor de retorno de onTouchEvent () do evento no ViewGroup :
true --------------> Evento de consumo
false / super -----> Nenhum evento é consumido, nem enviado e entregue ao controle pai Tratamento de OnTouchEvent ()
Etapa 3 (na visualização filha)
O
valor de retorno dispatchTouchEvent () do evento na Visualização :
true --------------> Evento de consumo
false -------------> Nenhum evento é consumido, não está inativo Envie-o para onTouchEvent () do controle pai para lidar com
super -------------> O evento é enviado para onTouchEvent () da Visualização atual
O
valor de retorno onTouchEvent () do evento na Visualização :
true --------------> Evento de consumo
false / super -----> Não consumir o evento, nem enviá-lo para o controle pai Tratamento de OnTouchEvent ()