【问题标题】:Detect a swipe gesture on webview在 webview 上检测滑动手势
【发布时间】:2013-07-01 12:50:31
【问题描述】:

我想要一个 WebView,当我从左向右滑动手指时,如何检测滑动手势以关闭我的 Activty。

手势检测器:

private class CustomeGestureDetector extends SimpleOnGestureListener {      
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if(e1 == null || e2 == null) return false;
        if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
        else {
            try { // right to left swipe .. go to next page
                if(e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 800) {
                    //do your stuff
                    return true;
                } //left to right swipe .. go to prev page
                else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 800) {
                    //do your stuff
                    return true;
                } //bottom to top, go to next document
                else if(e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 800 
                        && webView.getScrollY() >= webView.getScale() * (webView.getContentHeight() - webView.getHeight())) {
                    //do your stuff
                    return true;
                } //top to bottom, go to prev document
                else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 800 ) {
                    //do your stuff
                    return true;
                } 
            } catch (Exception e) { // nothing
            }
            return false;
        }
    }
}

自定义网页视图

public final class CustomWebView extends WebView {

private GestureDetector gestureDetector;

/**
 * @param context
 * @param attrs
 * @param defStyle
 */
public CustomWebView(Context context) {
    super(context);
}

/**
 * @param context
 * @param attrs
 * @param defStyle
 */
public CustomWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

/**
 * @param context
 * @param attrs
 * @param defStyle
 */
public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

/* 
 * @see android.webkit.WebView#onScrollChanged(int, int, int, int)
 */
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);
}

/* 
 * @see android.webkit.WebView#onTouchEvent(android.view.MotionEvent)
 */
@Override
public boolean onTouchEvent(MotionEvent ev) {
    return gestureDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
}

public void setGestureDetector(GestureDetector gestureDetector) {
    this.gestureDetector = gestureDetector;
}
}

在我的 onCreate Activity 中,但 setGestureDetector 没有为 Object 类型定义:

webView.setGestureDetector(new GestureDetector(new CustomeGestureDetector())); 

我怎样才能代替 setGestureDetector(new GestureDetector(new CustomeGestureDetector()));用于初始化我的网络视图?

【问题讨论】:

    标签: android webview swipe-gesture gesturedetector


    【解决方案1】:

    尝试使用webview的ontouch

       webView.setOnTouchListener(this);
       gestureDetector = new GestureDetector(new CustomeGestureDetector());
    

    并覆盖此触摸事件

     @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (gestureDetector.onTouchEvent(event)){
                Log.v(TAG,"screen touched");
                return true;
            }
            else{
                return false;
            }
        }
    

    【讨论】:

    • 我将 onTouchEvent 放在哪里,在我的 Activity 中还是在我的自定义 WebView 中?
    • webview 不存在 setOnTouchListener
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 2012-08-28
    • 2017-10-18
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多