實現該功能大家一定會想到在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); }