webview 实现滑动前进后退功能
Posted mark_xiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); }
以上是关于webview 实现滑动前进后退功能的主要内容,如果未能解决你的问题,请参考以下文章