У меня есть этот код, реализующий RecyclerView, и я хочу добавить к нему несколько жестов. Я хочу сделать 2 дела и не знаю, потому что я новичок в этом.
Когда кто-то нажимает на RecyclerView, я хочу поймать событие от Activity до того, как он перейдет в переработку. Вот почему я возвращаю истину от dispatchTouchEvent. Но не работает, потому что вызывается onTouch.
В случае, если мы позволим событию пройти, когда событие касания переходит в ресайклер (метод OnTouch), ActivityonTouchEvent не вызывается. Предполагается, что он будет вызван, потому что всплывает обработка события.
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
private RecyclerView recyclerView;
private GestureDetectorCompat detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
detector = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling (MotionEvent e1, MotionEvent e2,float velocityX,
float velocityY){
return false;
}
});
recyclerView.setOnTouchListener(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
@Override
public boolean onTouch(View v,MotionEvent event) {
return detector.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
return true;
}
}
Вы не хотите, чтобы представление ресайклера съело событие, тогда у вас есть два пути
That's why I return true from dispatchTouchEvent
Верните ложный из dispatchTouchEvent, когда вы делаете это в recyclerView, тогда dispatchTouchEvent () дочернего элемента recyclerView не вызывается, поэтому событие даже не пропадет, поэтому пузырьков не будет. Это означает, что onTouch / onTouchEvent для recyclerView или любого его дочернего элемента также будет вызываться нет. Будет вызываться непосредственно onTouch on Activity.
Верните ложный из onTouch (), в этом случае событие опустится до всех дочерних представлений, и если они не будут использованы, то дойдет до представления ресайклера, и если вы вернете отсюда false, будет вызываться onTouch Activity.
ПРИМЕЧАНИЕ: Поэтому вам нужно выбрать одно, у вас не может быть обоих.
Что вы хотите сделать после того, как поймаете событие касания в действии?