• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
mark_xiao
博客园    首页    新随笔    联系   管理    订阅  订阅

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);
    }

 



posted @ 2016-03-30 11:35  mark_xiao  阅读(5971)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3