MyException - 我的异常网
当前位置:我的异常网» Web前端 » [原创]本地解决ViewPager和Webview引起的滑动冲突有

[原创]本地解决ViewPager和Webview引起的滑动冲突有关问题

www.MyException.Cn  网友分享于:2013-09-28  浏览:0次
[原创]本地解决ViewPager和Webview引起的滑动冲突问题

前言:毕业之后在高薪的后厂村互联网公司和生活工作平衡的体制内之间纠结了好久,最后选择了后者,毕竟后厂村只要有技术什么时候都能去,体制内基本上除了应届生这次机会基本上就再也进不去了,社招就算进去也没有编制。基于“面对两难选择时,选择没有体验过的那个”的原则,选择了体制,然后有幸被分配到了移动端开发的部门,以前积累的一点小知识算是没有浪费。负责的这个app每天有几千人用,虽然大家都在吐槽它速度慢,体验差,bug多,适配不友好……但是如果你是他的客户,你是不得不用的,因为……他管钱。

需求:体制内的程序还是以稳定为主,所以技术探索并不像后厂村的大厂一样经常探索。现在一个需求就是解决ViewPager和webview轮播图的滑动问题。看了一些博客我认为由js端传给android端轮播图的位置的解决方案体验最好。但是由于种种原因,上级希望能够android端本地解决。本地解决问题就来了,我怎么知道webview里面的轮播图在哪里?在我目前的知识储备来看,单凭android端是做不到的。

解决方法:所以就想了一个本地的笨方法,把屏幕分割成左中右三份,从手指落地的位置开始算,在两边滑动就滑动ViewPager,在中间滑动就滑动webview轮播图片。

两个思路:一个是给webview添加onTouchListener,使用requestDisallowInterceptTouchEvent()方法告诉ViewPager要不要拦截。太简单,会出现拦截不及时,轮播图还会滑动一点,造成轮播图卡住,不自动轮播,需要手动调整复位才能继续轮播。我认为是js端的问题,但是无法解决。为什么?如果能解决早就可以js端告诉android端轮播图在哪了!

第二个思路就是重写ViewPager的OnInterceptTouchEvent()方法,根据不同的情况对情况进行拦截。

第一步:ACTION_DOWN在两边OnInterceptTouchEvent()返回true,在中间返回false。嗯,这样不会发生轮播图滑动一点的情况了。可是,在两边的都拦截了,那在Fragment里面两边的控件 怎么办,没法点击了,被拦截了。

第二步:所以即使在两边也有不被拦截的情况。目前发现两种,一种是点击,一种是上下滑动。因为一个触摸事件是先一个ACTION_DOWN,后面若干个ACTION_MOVE,最后一个ACTION_UP。这个move只要手指在屏幕上就会一直调用,所以哪怕是点击事件有时也会出现move。因为滑动时间和距离是一直增加的,所以就在move滑动时间和距离大于某个数之后return。经过调试和体验,基本上达到了要求。

无法解决的问题:

如果一个fragment包含多个webview或其他控件,一个webview只包括一个html控件还好。如果一个fragment包含只包含一个大webview,大webview里是一个完整的网页,甚至没有轮播图,那就造成即使在中间滑动也没什么用。这个问题只靠android端我现在还没好的方案,哪个大神有可以赐教。

下面贴出OnIntercepTouchEvent代码

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event){
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                downX=event.getX();
                downY=event.getY();
                downTime= System.currentTimeMillis();
                if (downX< ScreenUtil.getScreenWidthPixels(getContext())/5||downX>ScreenUtil.getScreenWidthPixels(getContext())/5*4){
                    isIntercept=true;
                }else {
                    isIntercept=false;
                    return false;
                }
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                long moveTime= System.currentTimeMillis();
                float moveX=event.getX();
                float moveY=event.getY();
                if (isIntercept&&(Math.abs(moveY-downY)<20)&&((moveTime-downTime>300)||(Math.abs(moveX-downX)>9))){
                    return true;
                }
                if (isIntercept&&(Math.abs(moveY-downY)>=20)){
                    return false;
                }
                break;
        }
        return super.onInterceptTouchEvent(event);
    }

  

文章评论

5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
代码女神横空出世
代码女神横空出世
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员必看的十大电影
程序员必看的十大电影
编程语言是女人
编程语言是女人
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员的鄙视链
程序员的鄙视链
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
如何成为一名黑客
如何成为一名黑客
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
中美印日四国程序员比较
中美印日四国程序员比较
Java程序员必看电影
Java程序员必看电影
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
每天工作4小时的程序员
每天工作4小时的程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
鲜为人知的编程真相
鲜为人知的编程真相
漫画:程序员的工作
漫画:程序员的工作
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老程序员的下场
老程序员的下场
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员和编码员之间的区别
程序员和编码员之间的区别
我的丈夫是个程序员
我的丈夫是个程序员
旅行,写作,编程
旅行,写作,编程
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员都该阅读的书
程序员都该阅读的书
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
一个程序员的时间管理
一个程序员的时间管理
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
为什么程序员都是夜猫子
为什么程序员都是夜猫子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有