Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当ScrollView滚动时,Android禁用子onTouch_Android_Ontouchlistener_Android Scrollview_Ontouch_Onscrolllistener - Fatal编程技术网

当ScrollView滚动时,Android禁用子onTouch

当ScrollView滚动时,Android禁用子onTouch,android,ontouchlistener,android-scrollview,ontouch,onscrolllistener,Android,Ontouchlistener,Android Scrollview,Ontouch,Onscrolllistener,在我的布局中,我有一个滚动视图,其中包含视频视图和其他文本视图 My VideoView有一个onTouch侦听器开始播放视频: viPlayer.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (isPlaying) { isPlaying = false;

在我的布局中,我有一个滚动视图,其中包含视频视图和其他文本视图

My 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;
      }
});
我面临的问题是:当用户将手指放在
视频视图
上方并开始向下滚动
滚动视图时,视频开始播放。我希望在执行滚动时,
ScrollView
的子视图不应执行任何操作。我看到没有用于ScrollView的onScroll的侦听器。如何修复此问题?

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

所以我测试了这个,这个对我有用。将视频触摸事件更改为此。删除scrollview触摸事件。请注意
返回true
而不是
返回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;
        }

这听起来是一个非常好的解决方案,但是当我尝试将touch listener设置为
ScrollView
时,我发现:
方法RequestDisallowWinterCeptTouchEvent(布尔值)对于类型VideoView
是未定义的,所以我猜VideoView不支持它?这意味着它没有该方法。试试这个。设置一个布尔字段。并将其设置为false,而不是不允许的调用,并且在另一个调用上设置为true。然后检查视频触摸事件上的标志。我不在电脑上,但回家后我会更新答案好的,我已经编辑了答案。请注意,我已经更改了视频播放器触控监听器的代码。您只需控制是否在ScrollView上单击,它就不起作用了
viPlayer
只接收事件ACTION\u DOWN而不接收ACTION\u UP,这真的很奇怪……这可能是我犯的某个错误。我编辑了viPlayer touchListener。将if更改为ACTION_UP案例中的if。