前言

如题所述,我使用的架构是ViewPager+Fragment+WebView进行开发的,由于WebView的html页面代码是第三方的,这里不好放出来,所以只能放一个大致的架构图,如图所示,ViewPager包含了两个fragment,可以左右滑动的,左边Fragment的WebView顶部包含了一个banner,这种情况下就会引起banner与ViewPager的滑动冲突。这个问题已经有人有解决方案了,见Viewpager与webview滑动冲突的解决方案,但是这个解决方案需要前端配合,有点麻烦,所以我自己想了个解决方案

问题点

  1. WebView虽然是继承自AbsoluteLayout的但是却不能获取到它的子View
  2. 我的这个WebView是一个音乐展示页面,所以上滑会加载更多
  3. 如何获得banner的高度

解决方案

由于问题点1的存在,无法使用获取子View方式来获取到banner,只能通过获取banner的那一段区域,然后通过WebView的onTouchListener设置requestDisallowInterceptTouchEvent()来进行解决,代码如下:

mWebView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {//Rect用于描述WebView的在整个界面坐标,它的left,top,bottom,right四个属性就是描述一个View相对于参照物(如父布局的)的距离Rect rect = new Rect();//v即是mWebView,getLocalVisibleRect(rect),是把WebView的相对于父布局的坐标描述出来并放入Rect中v.getLocalVisibleRect(rect);switch (event.getAction()) {case MotionEvent.ACTION_DOWN://rect.top == 0表示滑动到顶部if (rect.top == 0 && event.getY() >= 0 && event.getY() < dpToPx(162)) {mWebView.requestDisallowInterceptTouchEvent(true);} else {mWebView.requestDisallowInterceptTouchEvent(false);}break;}return false;}
});int dpToPx(int dp) {float scale = getResources().getDisplayMetrics().density;return (int) (dp * scale + 0.5f);
}
复制代码

这里没有直接使用event.getY()或者是event.getRawY()是因为问题点2的存在,因为滑过了banner之后会出现这两个值还是处于有效的阶段,必须要添加banner处于显示状态的条件。这个地方使用的getLocalVisibleRect方法,关于这个方法我是参照的这个地方,getGlobalVisibleRect和getLocalVisibleRect,直接看最后的结论即可。
最后一个问题点3是关于如何获取banner高度的问题,有两种方式,第一种是直接找前端问, 但是我问的前端不是很靠谱,给的是错的。另一种,自己算,我用的是Android Monitor,AndroidStudio 2.3.3之后好像就没了,只能在SDK目录/tools/monitor打开了,然后截图工具Dump View Hierarchy for UI Automator找到banner对应的View,计算高度

(0,1080)代表的是宽度,(193, 676)代表的是高度,最后计算出来banner的高度是483,单位是px,需要转换为dp。

Android WebView与ViewPager的滑动冲突分析相关推荐

  1. Slidingmenu与ViewPager广告栏滑动冲突解决分享

    之前在公司开发的时候, 在主页部分fragment使用了ViewPager作为广告栏,但项目里又引用了SlidingMenu开源库用作侧滑菜单,于是这里产生了滑动冲突:广告栏不能滑动了,滑动却是侧滑了 ...

  2. 关于ViewPager嵌套ViewPager左右滑动冲突解决方法

    情况如下,TabLayout+ViewPager+Fragment,其中一个Fragment里面又嵌套了一层TabLayout+ViewPager+Fragment,运行的时候出现了两个情况. 1.子 ...

  3. Android笔记之ViewPager实现滑动页面

    1.概述; Viewpager的最大特点就是实现滑动的界面 多个页面的内容可以有两种填充方式:View (普通Activity下),Fragment(V4的Fragmentctivity或者Fragm ...

  4. android 禁止Viewpager左右滑动功能

    今天,简单讲讲Android如何禁止Viewpager左右滑动功能. 原理: 百度后发现重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEven ...

  5. 每日一问:Android 滑动冲突,你们都是怎样处理的

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 在 Android 开发中,滑动冲突总是我们一个无法避免的话题.而对于解 ...

  6. pb自定义控件 事件_Android WebView与下拉刷新控件滑动冲突的解决方法

    使用WebView时一般会在外层使用下拉刷新控件如(SwipeRefreshLayout).但是测试时会发现网页无法上拉,往上滑动就会触发下拉刷新控件的refresh事件.所以这里记录一下解决该问题的 ...

  7. 解决ViewPager嵌套WebView时滑动冲突问题

    问题描述 当ViewPager里嵌套WebView时,默认WebView是处理不了滑动事件的.这样的话,如果WebView里内容一屏展示不完,就没法查看完整内容了. 解决方案 定制WebView,覆写 ...

  8. Android滑动冲突的完美解决方案

    一.Android滑动冲突的完美解决方案 在Android开发中滑动冲突可以说是比较常见的一类问题,也是比较让人头疼的一类问题,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了.滑动冲突主 ...

  9. Android滑动冲突解决方法

    Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...

最新文章

  1. AdminIII连接linux Postgresql过程中的几个小问题
  2. 东南亚智能金融决策平台Silot完成A 轮融资,SBI 领投...
  3. 遗传算法对于神经网络的优生优育
  4. 前线解释多线程《二》
  5. 多线程——线程的生命周期
  6. 动态规划 —— 线性 DP
  7. 春联c语言,千古绝对过年春节对联80幅
  8. 涉密专用服务器审计系统,国产专用服务器主机审计
  9. mybatis中转义 大于,小于,大于等于,小于等于
  10. 初中信息技术认识计算机,初中信息技术 认识计算机
  11. 水利水电水资源模拟试题3
  12. 【思想落地】一文分享Qt界面的设计与开发
  13. 用大于一素数的最小素数替换4*4矩阵中的素数
  14. 运算放大器 你想知道的都在这里
  15. IntelliJ IDEA 破解 到2100年到期
  16. python 自动生成问卷表的软件的设计与实现 毕业设计源码291138
  17. stream流的常用方法
  18. L1-059 敲笨钟
  19. 达观数据智能对公审贷系统,深化上海银行普惠金融、供应链金融科技创新
  20. python常用关键字意思_Python 关键字列表及示例

热门文章

  1. 一种清除windows通知区域“僵尸”图标的方案——XP系统解决方案
  2. C和C++安全编码笔记:整数安全
  3. 远程过程调用RPC简介
  4. Intel TBB简介及在Windows7 VS2013上源码的编译过程
  5. Linux Socket基础介绍
  6. Windows7下OpenGL简单使用举例
  7. 【OpenCV】读取csv文件
  8. c7pro android7,三星c7pro和iphone7哪个值得买?三星Galaxy c7 pro和苹果iphone7区别对比详细评测...
  9. layui如何存在多个弹窗_layui常见弹窗使用方法
  10. 远程服务器端口怎么修改,如何修改远程服务器端口号