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;
}