Android отключает дочернюю функцию onTouch при прокрутке ScrollView

На моем макете у меня есть ScrollView, который содержит VideoView и другие TextViews.

Мой VideoView имеет слушателя onTouch, чтобы начать воспроизведение видео:

viPlayer.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
         if (isPlaying) {
            isPlaying = false;
            viPlayer.stopPlayback();
         } else {
            isPlaying = true;
            viPlayer.start();
         }
         return false;
      }
});

Проблема, с которой я сталкиваюсь, заключается в следующем: когда пользователь кладет палец выше VideoView и начинает прокручивать вниз ScrollView, видео начинает воспроизводиться. Я хочу, чтобы при выполнении прокрутки дочерние представления ScrollView не должен ничего делать. Я вижу, что нет слушателя для OnScroll для ScrollView. Как я могу это исправить?

1 ответ

Решение

ОБНОВЛЕНИЕ Позвольте мне объяснить вам, что происходит. События касания ребенка всегда вызываются первыми и только после вызова события родителя. То, что вы пытаетесь сделать, трудно без каких-либо взломов. Когда вы впервые касаетесь видео, вызывается событие касания, а затем вызывается событие просмотра прокрутки. Как просмотр видео может узнать, собираетесь ли вы прокручивать или нет? Он не знает заранее, что вы пытаетесь сделать. Так как же узнать, стоит ли вам воспроизводить видео или нет?

Итак, я проверил это, и это работает для меня. Измените свое видео на этот. Удалите событие касания scrollview. Обратите внимание на return true вместо return false,

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent)
        {
            switch (motionEvent.getAction()){
                case MotionEvent.ACTION_UP:
                    if (isPlaying) {
                     isPlaying = false;
                     viPlayer.stopPlayback();
                    } else {
                     isPlaying = true;
                     viPlayer.start();
                    }
                    break;
            }
            return true;
        }
Другие вопросы по тегам