当ScrollView滚动时,Android禁用子onTouch
在我的布局中,我有一个滚动视图,其中包含视频视图和其他文本视图 My VideoView有一个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;
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。