3

在我的布局中,我有一个 ScrollView,它承载了一个 VideoView 和其他 TextView。

我的 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,视频开始播放。我希望在执行 Scroll 时,子视图不ScrollView应该做任何事情。我看到 ScrollView 的 onScroll 没有侦听器。我怎样才能解决这个问题?

4

1 回答 1

2

更新 让我向您解释发生了什么。孩子的触摸事件总是首先被调用,并且只有在父事件被调用之后。如果没有一些技巧,你正在尝试做的事情很难。当您第一次触摸视频时,它的触摸事件被调用,然后滚动视图的事件被调用。视频视图如何知道您是否要滚动?它不知道你正在尝试做什么。那么你怎么知道你是否应该播放视频呢?

所以我测试了这个,这对我有用。将您的视频触摸事件更改为此。删除滚动视图触摸事件。注意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;
        }
于 2014-10-06T16:37:26.350 回答