在我的布局上,我有一个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的监听器。我该如何解决这个问题?
答案 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;
}