Opa pessoal.
Tenho uma tela com algumas abas. Cada aba possui vários TextViews.
Nesta tela o usuário deve conseguir alternar entre as abas com o movimento de arrastar o dedo para direita ou esquerda na tela.
Para isso, criei meu GestureDetector:
private class AlteraAbaGestureDetector implements OnGestureListener {
//...
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//...
//altero a aba que está sendo exibida.
return true;
}
}
Na minha Atividade, sobrescrevi o método onTouch:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mGestureDetector == null) {
mGestureDetector = new GestureDetector(new AlteraAbaGestureDetector());
}
return mGestureDetector.onTouchEvent(event);
}
Meu problema é que o metódo onTouchEvent da minha atividade só é chamado quando deslizo o dedo sobre uma área sem TextViews.
Se faço o mesmo movimento sobre os textviews, me parece que eles “consomem” o evento e não o passam para a atividade.
Fiz um teste e adicionei o seguinte listener para alguns textViews:
textView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.onTouchEvent(event);
return AbasActivity.this.onTouchEvent(event); //redireciono o evento para minha atividade
}
});
Adicionado esse listener aos TextViews, resolve o problema, mas não quero adicionar um listener para TODOS eles, um por um.
Existe alguma maneira de tratar o evento onTouch independente se ele qual view foi “disparado”??
Obrigado