Обработка TouchEvents в RecyclerView

У меня есть этот код, реализующий RecyclerView, и я хочу добавить к нему несколько жестов. Я хочу сделать 2 дела и не знаю, потому что я новичок в этом.

  1. Когда кто-то нажимает на RecyclerView, я хочу поймать событие от Activity до того, как он перейдет в переработку. Вот почему я возвращаю истину от dispatchTouchEvent. Но не работает, потому что вызывается onTouch.

  2. В случае, если мы позволим событию пройти, когда событие касания переходит в ресайклер (метод 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;
    }
    }
    

Что вы хотите сделать после того, как поймаете событие касания в действии?

nimi0112 27.07.2018 06:25
3
1
434
1

Ответы 1

Вы не хотите, чтобы представление ресайклера съело событие, тогда у вас есть два пути

That's why I return true from dispatchTouchEvent

  1. Верните ложный из dispatchTouchEvent, когда вы делаете это в recyclerView, тогда dispatchTouchEvent () дочернего элемента recyclerView не вызывается, поэтому событие даже не пропадет, поэтому пузырьков не будет. Это означает, что onTouch / onTouchEvent для recyclerView или любого его дочернего элемента также будет вызываться нет. Будет вызываться непосредственно onTouch on Activity.

  2. Верните ложный из onTouch (), в этом случае событие опустится до всех дочерних представлений, и если они не будут использованы, то дойдет до представления ресайклера, и если вы вернете отсюда false, будет вызываться onTouch Activity.

ПРИМЕЧАНИЕ: Поэтому вам нужно выбрать одно, у вас не может быть обоих.

Другие вопросы по теме