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