您可以编写自己的 WebView 实现来实现 OnGestureListener:
public class MyWebView extends WebView implements OnGestureListener
在里面声明一个 GestureDetector:
private GestureDetector gestureDetector;
实现一个 initWebView() 方法并在构造函数中调用它,如下所示:
// Best you do this for every WebViewConstructor:
public AppWebView(Context context) {
super(context);
initWebView(); }
private void initWebView(){
gestureDetector = new GestureDetector(getContext(), this);
// Do any other customizations for your webview if you like.
}
现在实现 OnGestureListener 中的方法并在双击事件时返回 true:
public boolean onSingleTapConfirmed(MotionEvent e) {
return false; //Nothing
}
public boolean onDoubleTap(MotionEvent e) {
return true; //Nothing
}
public boolean onDoubleTapEvent(MotionEvent e) {
return true; //Nothing
}
public boolean onDown(MotionEvent e) {
return false; //Nothing
}
public void onShowPress(MotionEvent e) {
//Nothing
}
public boolean onSingleTapUp(MotionEvent e) {
return false; //Nothing
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false; //Nothing
}
public void onLongPress(MotionEvent e) {
//Nothing
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false; //Nothing
}
最后覆盖您的 webview 的 OnTouchEvent 并让它通过事件传递给手势检测器,如下所示:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) return true;
return super.onTouchEvent(event);
}
这通常工作得很好,但这个解决方案有 1 个基本缺陷:一些未被识别为 DoubleTap 事件的事件可能会导致您的 web 视图缩放。
我仍在为此研究解决方案,并将在此处发布我的进展:
WebView 摆脱双击缩放。