当ScrollView滚动时,Android禁用子onTouch

时间:2014-10-06 16:26:26

标签: android ontouchlistener android-scrollview ontouch onscrolllistener

在我的布局上,我有一个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时,视频就会开始播放。我希望在执行Scroll时,ScrollView的子视图不应执行任何操作。我看到没有onScroll for ScrollView的监听器。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

<强>更新 让我来解释一下发生了什么。始终首先调用孩子的触摸事件,并且仅在调用父事件之后调用。如果没有一些黑客攻击你想要做的很难。当您第一次触摸视频时,会调用它的触摸事件,然后调用scrollview的事件。视频视图如何知道您是否要滚动?它并不提前知道你正在尝试做什么。所以你怎么知道你是否应该播放视频?

所以我测试了这个,这对我有用。将您的视频切换更改为此。删除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;
        }