Android WebView use setWideViewPort, disable double-tap zoom but keep pinch zoom?

前端 未结 4 1614
無奈伤痛
無奈伤痛 2021-02-03 14:51

I am using this code and it works exactly as I want. But I have to implemented another feature on double tap and would like to disable the double tap zooming (but keeping the pi

4条回答
  •  不思量自难忘°
    2021-02-03 15:04

    best solution, just extend your WebView from MyWebView

     public class HelpWebView extends WebView {
    
        private GestureDetector gestureDetector;
        private AtomicBoolean mPreventAction = new AtomicBoolean(false);
        private AtomicLong mPreventActionTime = new AtomicLong(0);
    
        public HelpWebView(Context context) {
            super(context);
            gestureDetector = new GestureDetector(context, new GestureListener());
        }
    
        public HelpWebView(Context context, AttributeSet attrs) {
            super(context, attrs);
            gestureDetector = new GestureDetector(context, new GestureListener());
        }
    
        public HelpWebView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            gestureDetector = new GestureDetector(context, new GestureListener());
        }
    
        public HelpWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
            super(context, attrs, defStyle, privateBrowsing);
            gestureDetector = new GestureDetector(context, new GestureListener());
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            int index = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
            int pointId = event.getPointerId(index);
    
            // just use one(first) finger, prevent double tap with two and more fingers
            if (pointId == 0){
                gestureDetector.onTouchEvent(event);
    
                if (mPreventAction.get()){
                    if (System.currentTimeMillis() - mPreventActionTime.get() > ViewConfiguration.getDoubleTapTimeout()){
                        mPreventAction.set(false);
                    } else {
                        return true;
                    }
                }
    
                return super.onTouchEvent(event);
            } else {
                return true;
            }
        }
    
        private class GestureListener extends GestureDetector.SimpleOnGestureListener {
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                mPreventAction.set(true);
                mPreventActionTime.set(System.currentTimeMillis());
                return true;
            }
            @Override
            public boolean onDoubleTapEvent(MotionEvent e) {
                mPreventAction.set(true);
                mPreventActionTime.set(System.currentTimeMillis());
                return true;
            }
        }
    }
    

提交回复
热议问题