Fling Gesture and Webview in Android

前端 未结 3 919
面向向阳花
面向向阳花 2020-12-03 08:06

I have a webview control that needs to support the fling gesture in Android in order to bring up a new record (load new data). This is occuring in a class that extends Activ

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-03 09:06

    I updated the code, this will now allow to call native events handlers if user didn't flinged

    import android.content.Context;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.webkit.WebView;
    
    public class MyWebView extends WebView {
        private boolean flinged;
    
        private static final int SWIPE_MIN_DISTANCE = 320;
        private static final int SWIPE_MAX_OFF_PATH = 250;
        private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    
        public MyWebView(Context context, AttributeSet attrs) {
            super(context, attrs);
            gd = new GestureDetector(context, sogl);
        }
    
        GestureDetector gd;
    
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
             gd.onTouchEvent(event);
             if (flinged) {
                 flinged = false;
                 return true;
             } else {
                 return super.onTouchEvent(event);
             }
        }
    
        GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
        // your fling code here
            public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
                if (event1.getX() < 1200 && event1.getX() > 80) {
                    return false;
                }
                if (Math.abs(event1.getY() - event1.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                if(event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    loadUrl("javascript:changePage('LEFT')");
                    Log.i("Swiped","swipe left");
                    flinged = true;
                } else if (event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    loadUrl("javascript:changePage('RIGHT')");
                    Log.i("Swiped","swipe right");
                    flinged = true;
                }
                return true;
            }
        };
    }
    

提交回复
热议问题