WebView getting rid of double tap zoom.

后端 未结 6 954
悲&欢浪女
悲&欢浪女 2020-12-19 03:18

I read many tickets on the topic of Zooming in WebViews and didnt came to an answer for my case.

Here´s my setup:

I´m using a custom webview with generally

6条回答
  •  天命终不由人
    2020-12-19 03:23

    If possible, replace the static meta tag in your html:

    
    

    Additionally you can use a nice script: FastClick
    It won't wait for tap events so its faster.

    
    
        
    

    Then set a double tap listener to your gesture detector. (in custom WebView)

    gestureDetector.setOnDoubleTapListener(new OnDoubleTapListener() {
    
        @Override
        public boolean onSingleTapConfirmed( MotionEvent e ) {
            return false;
        }
    
        @Override
        public boolean onDoubleTapEvent( MotionEvent e ) {
    
            return true;
        }
    
        @Override
        public boolean onDoubleTap( MotionEvent e ) {
    
            return true;
        }
    });
    

    Override the onTouchEvent method (in custom WebView):

    @Override
    public boolean onTouchEvent( MotionEvent event ) {
    
        boolean gestureHandled = gestureDetector.onTouchEvent(event);
        int actionMask = event.getActionMasked() & MotionEvent.ACTION_MASK;
        int index = ( event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
        int pointId = event.getPointerId(index);
    
        // ignore move events
        if (actionMask == MotionEvent.ACTION_MOVE) {
    
            return super.onTouchEvent(event);
        }
    
        // cancel detected double taps
        if (gestureDetector.onTouchEvent(event)) {
            event.setAction(MotionEvent.ACTION_CANCEL);
            super.onTouchEvent(event);
            return true;
        }
    
        // if you want to ignore multi touch events/taps
        if (pointId != 0) {
    
            System.out.println("KEY multiple points detected");
            return true;
        }
    
        // use single taps
        if (event.getAction() == MotionEvent.ACTION_UP) {
    
            event.setAction(MotionEvent.ACTION_CANCEL);
            super.onTouchEvent(event);
            event.setAction(MotionEvent.ACTION_DOWN);
            super.onTouchEvent(event);
            event.setAction(MotionEvent.ACTION_UP);
            return true;
        }
    
    return super.onTouchEvent(event);
    }
    

提交回复
热议问题