webview 實現滑動前進后退功能


實現該功能大家一定會想到在OnTouchListener里實現

webview.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = (int) event.getX();
                    break;
                case MotionEvent.ACTION_UP:
                    int endX = (int) event.getX();
                    if(endX>startX && webview.canGoBack() && endX-startX>scrollSize){
                        webview.goBack();
                    }else if(endX<startX &&webview.canGoForward() && startX-endX>scrollSize){
                        webview.goForward();
                    }
                    break;
                default:
                    break;
                }
                return false;
            }
        });

這里要注意的是,返回值要為false,將此事件繼續向下傳遞.否則會引起 超鏈接不起作用的問題.

將onTouch()事件中的返回值改為false之后,有時候仍然還是不會觸發onTouch()事件,那是因為加了縮放功能,使得Touch事件會失效。由於webview的縮放同樣會響應onTouch事件的,所以會覆蓋掉我們自己設置的onTouhc監聽,引起了事件的沖突。

解決沖突的方法如下:

將touch事件寫到dispatchTouchEvent中

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        webview.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = (int) event.getX();
                    break;
                case MotionEvent.ACTION_UP:
                    int endX = (int) event.getX();
                    if(endX>startX && webview.canGoBack() && endX-startX>scrollSize){
                        webview.goBack();
                    }else if(endX<startX &&webview.canGoForward() && startX-endX>scrollSize){
                        webview.goForward();
                    }
                    break;
                default:
                    break;
                }
                return false;
            }
        });
        return super.dispatchTouchEvent(ev);
    }

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM