1. 程式人生 > >WebView載入的網頁中touch事件處理

WebView載入的網頁中touch事件處理

        一直有接觸webview,也用到了很多關於webview的各種特性,一直沒找到時機吧所有的webview的用法總結起來,這次也暫時先記錄一下webview載入網頁,我們在網頁中的點選,滑動等動作的事件處理機制。當時的需求大概是我在fragment中使用WebView,當無操作15秒之後退出該fragment,回到activity。我的想法就是監聽網頁中的點選和滑動事件,然後有操作就讓一個int變數值為0,然後handler裡面對這個值進行判斷,大於15就退出,小於15就++。話不多說,直接上程式碼

public class MyWebView extends WebView {

    private OnTouchEventCallback mOnTouchEventCallback;

    public MyWebView(Context context) {
        super(context);
    }

    public MyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                if (mOnTouchEventCallback!=null){
                    mOnTouchEventCallback.onActionDown();
                }
            break;
            case MotionEvent.ACTION_MOVE:
                if (mOnTouchEventCallback!=null){
                    mOnTouchEventCallback.onActionMove();
                }
                break;
        }
        return super.onTouchEvent(event);
    }

    public OnTouchEventCallback getOnTouchEventCallback() {
        return mOnTouchEventCallback;
    }

    public void setOnTouchEventCallback(
            final OnTouchEventCallback onTouchEventCallback) {
        mOnTouchEventCallback = onTouchEventCallback;
    }

    public static interface OnTouchEventCallback {
        public void onActionDown();
        public void onActionMove();
    }
}
        這是一個自定義的webview,繼承自webview,這裡我們重寫onTouchEvent方法,並對外提供一個介面。最後在fragment中setOnTouchEventCallback,示例如下
webView.setOnTouchEventCallback(new MyWebView.OnTouchEventCallback() {
            @Override
            public void onActionDown() {
                Log.e(TAG, "onActionDown");
            }

            @Override
            public void onActionMove() {
                Log.e(TAG, "onActionMove");
            }
        });