Honeycomb webview ontouchmove活动

时间:2011-10-18 19:07:19

标签: javascript android webview android-3.0-honeycomb

我们正在Android应用中的网络视图中收听'ontouchmove'。这些事件似乎在2.3中都很好,但在Honeycomb上,似乎我们得到了一个事件,就是这样。知道发生了什么吗?

2 个答案:

答案 0 :(得分:1)

我的答案中的代码示例是gwt示例,但同样适用于JavaScript。

WebView将在第一个onTouchMove之后接管事件,主要是为了允许滚动。你可以通过调用

来阻止这种情况
event.preventDefault();

我不知道为什么这特别是Honeycomb的事情,但是如果你抓住第一个onTouchMove事件并在此时决定是否要通过调用preventDefault()接管你应该能够处理很多案件。作为一个例子,我想实现水平滑动,同时仍然允许基本功能(如垂直滚动,链接......)工作。

    @Override
public void onBrowserEvent(Event event) {
    switch (event.getTypeInt()) {
    case Event.ONTOUCHSTART:
        startPoint = new Point(event.getChangedTouches().get(0).getClientX(), event.getChangedTouches().get(0).getClientY());
        break;
    case Event.ONTOUCHMOVE:
        endPoint = new Point(event.getChangedTouches().get(0).getClientX(), event.getChangedTouches().get(0).getClientY());
        double dx = startPoint.getX() - endPoint.getX();
        double dy = startPoint.getY() - endPoint.getY();
        if (Math.abs(dx) > SWIPE_X_MIN) {
            if (Math.abs(dy) < SWIPE_Y_MAX) {
                // Decided it really is a horizontal swipe
                event.preventDefault();
                if (dx < 0) {
                    Window.alert("swiped right");
                } else {
                    Window.alert("swiped left");
                }
            }
        }
        break;
    }       
} 

我希望能给出一些见解。

答案 1 :(得分:0)

touchstart上的preventDefault将允许事件触发,但是本机滚动将被禁用...(不太理想!)有一个垫片试图克服这个嵌入在数百万个Android设备上的问题。 https://github.com/TNT-RoX/android-swipe-shim