实现该功能大家一定会想到在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 实现滑动前进后退功能的更多相关文章

  1. Swipe to back not working滑动后退功能消失?

    如果你发现滑动后退功能突然失效了,很可能是因为你隐藏了NavigationBar 或者定制了 leftBarButtonItem(s) 这会导致 NavigationController 的 inte ...

  2. 移动端h5禁用浏览器左滑右滑的前进后退功能

    在项目运行过程中发现,用户在有左右滑动前进后退的功能的浏览器上签字时,偶然触发了前进后退会导致canvas像是重置了一样内容消失,所以需要在代码中处理这种情况. 基本原理就是在touchmove事件中 ...

  3. 禁用backspace键的后退功能

    禁用backspace键的后退功能,但是可以删除文本内容<script language="JavaScript">document.onkeydown = check ...

  4. js Touch事件(向左滑动,后退)

    js Touch事件(向左滑动,后退) 代码如下 var touch_p = { c_x : 0, c_y : 0, hasbacked : false }; function touches(ev) ...

  5. 【转】【JavaScript】禁用backspace键的后退功能,但是可以删除文本内容

    在JavaScript中添加以下代码,就可实现 禁用backspace键的后退功能,但是可以删除文本内容 // 禁用backspace键的后退功能,但是可以删除文本内容 document.onkeyd ...

  6. 让浏览器支持 jquery ajax load 前进、后退 功能

    BEGIN; 一般在做 ajax load 的时候,非常多人都不会考虑到须要浏览器支持前进后退功能,由于大部分人都不知道能够实现. 近期遇到这个问题,经过一小段研究,发现github已经有现成的开源工 ...

  7. react native webview 不能滑动页面

    用RN 写Android的时候,webview点击正常,但是不能滑动,或者滑动很艰难.调试不报错,inspect一切正常. 遍查网络无良方, 最后发现其他同事在最外层套了个这东西: Touchable ...

  8. 使用history.pushState()和popstate事件实现AJAX的前进、后退功能

    上一篇文章中.我们使用location.hash来模拟ajax的前进后退功能.使用location.hash存在以下几个问题: 1.使用location.hash会导致地址栏的url发生变化.用户体验 ...

  9. js禁止浏览器页面后退功能

    js禁止浏览器页面后退功能: <script> $(function(){ ) { //防止页面后退 history.pushState(null, null, document.URL) ...

随机推荐

  1. python字典访问的三种方法

    定义字典 dic = {'a':"hello",'b':"how"} 法一: for key in dic: print key,dic[key] # a he ...

  2. 2016-06-08:Windows中的bat脚本

    涉及循环嵌套,启用变量延时,算术运算 @echo off setlocal enabledelayedexpansion %路径以及文件名等变量设置% set x264_exe=E:\demo\c++ ...

  3. [js]识别浏览器及版本

    var userAgent = navigator.userAgent.toLowerCase();window.jQuery.browser = {    version: (userAgent.m ...

  4. TIJ读书笔记08-数组的初始化和可变长参数形参

    TIJ读书笔记08-数组的初始化和可变参数形参 数组 数组的声明 数组的初始化和赋值 可变参数列表 数组 相同类型的,用一个标识符名称封装到一起的一个对象序列或者基本数据类型序列叫数组.(多么严谨的概 ...

  5. 解析工具Goson

    /** * 解析申请分配座位席别 * @param json * @return */ public static TrainOrderResponse getTrainOrder(String js ...

  6. {vlFeat}{Matlab}Linux中matlab的vlFeat配置

    1.下载vlFeat编译后的版本binary package 2.解压后将 toolbox/,bin/,data/ 等文件夹复制到matlab新建工具箱目录 /toolbox/vlfeat/ 中 3. ...

  7. SQL Server 查询处理中的各个阶段(SQL执行顺序)

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  8. Delphi编译的程序,查看控件名称方法

    使用SpyLite24这个软件可以查看程序所使用的控件名称

  9. php解析json数组

    function urltest(){ $url='http://121.43.153.80:8983/solr/collection1/select?q=+searchkey%3a%E4%BC%9A ...

  10. AJAX向服务器发送请求

    使用 XMLHttpRequest 对象的 open() 和 send() 方法: 方法 描述 open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求. metho ...