ListView上的滚动触摸事件在列表项WebView中单击javascript时解释

时间:2014-02-25 05:31:55

标签: android webview

我有ListView,其中每个项目都包含WebView。这些Web视图中的每一个实际上都在显示从外部源加载的视频播放器。每个WebView的内容都有一个固定的高度,并且完整显示,我可以通过设置避免任何滚动内滚动问题:

_webView.setVerticalScrollBarEnabled(false);
_webView.setHorizontalScrollBarEnabled(false);

我的问题是,当您滑动列表视图以滚动项目(工作正常)时,WebView内的播放器会将其解释为单击并开始播放视频。我想从WebView的角度来看,鼠标在x点下降,然后出现在同一点上,所以看起来像是一个点击。

有没有什么方法可以在顶部覆盖某种透明视图或做一些其他技巧,这样只有单击手势才能进入WebView,任何滑动/移动手势都被视为正常。

1 个答案:

答案 0 :(得分:0)

我自己设法解决了这个问题。诀窍是继承WebView,然后覆盖onTouchEvent方法,如下所示:

@Override
public boolean onTouchEvent(MotionEvent event)
{
    // If this web view gets sent a 'CANCEL' event, it means the parent list view has intercepted the event (for scrolling), so we want to catch it, otherwise it propogates into the HTML and starts the video
    int action = MotionEventCompat.getActionMasked(event);
    if(action == MotionEvent.ACTION_CANCEL)
    {
        return true;
    }
    return super.onTouchEvent(event);
}

我最终得出的结论是,当正确滑动时,封闭的ListView已经拦截了触摸事件,并将ACTION_CANCEL事件发送到WebView。通过在ACTION_CANCEL方法中捕获onTouchEvent事件,可以防止事件进入WebView中的HTML。