zoukankan      html  css  js  c++  java
  • 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);
        }


  • 相关阅读:
    JMeter使用BeanShell断言
    Django启动时找不到mysqlclient处理 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
    Yapi本地搭建及错误解决
    Selenium设置页面超时时间-快速终止页面加载
    Vue全套精品课笔记
    剑指offer 不用加减乘除做加法
    C++标准库函数
    剑指offer 左旋转字符串
    剑指offer 翻转单词顺序列
    剑指offer 扑克牌顺子
  • 原文地址:https://www.cnblogs.com/kelina2mark/p/5336487.html
Copyright © 2011-2022 走看看