当前位置: 首页 > 编程日记 > 正文

Android WebView与ViewPager的滑动冲突分析

前言

如题所述,我使用的架构是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。

相关文章:

关于outlook2010帐户设置

安装了office2010后&#xff0c;首次使用outlook&#xff0c;关于帐户设置&#xff0c;以qq邮件为例 开启imap服务2.打开outlook2010软件 由于有文字限制&#xff0c;其他的图解请链接http://wlinfang.blog.51cto.com/2961560/902193转载于:https://blog.51cto.com/wlinfang/90…

如何构建可解释的推荐系统?| 深度

作者 | gongyouliu来源 | 大数据与人工智能&#xff08;ID&#xff1a;ai-big-data&#xff09;推荐系统的目标是为用户推荐可能会感兴趣的标的物。通过算法推荐达到节省用户时间、提升用户满意度、为公司创造更多的商业价值的目的。要想达到这个目的就需要让用户信任你的推荐系…

【Qt】获取、比较Qt版本的宏和函数

1、版本号宏定义 版本号宏定义在QtCore\qconfig.h中,以Qt5.14.2为例 #define QT_VERSION_STR "5.14.2" #define QT_VERSION_MAJOR 5 #define QT_VERSION_MINOR 14 #

Spring Cloud企业微服务分布式云架构技术点整合

spring cloud本身提供的组件就很多&#xff0c;但我们需要按照企业的业务模式来定制企业所需要的通用架构...下面我针对于spring cloud微服务分布式云架构做了以下技术总结&#xff0c;希望可以帮助到大家&#xff1a;View&#xff1a; H5、Vue.js、Spring Tag、React、angular…

学习 JS navigator 对象

集合描述IEFOplugins[] 返回对文档中所有嵌入式对象的引用。 该集合是一个 Plugin 对象的数组&#xff0c;其中的元素代表浏览器已经安装的插件。Plug-in 对象提供的是有关插件的信息&#xff0c;其中包括它所支持的 MIME 类型的列表。 虽然 plugins[] 数组是由 IE 4 定义的&am…

【Ubuntu】解决ubuntu系统root用户下Chrome无法启动问题

1、问题描述 ubuntu系统在root用户下无法启动Chrome&#xff0c;报错&#xff1a; Running as root without --no-sandbox is not supported. See https://crbug.com/6381802、解决方法 如果是用命令行启动&#xff0c;启动时加上参数“–no-sandbox”即可&#xff1b; 如果…

程序媛眼中的程序猿原来是这样子的!

2019独角兽企业重金招聘Python工程师标准>>> 一直都想写一篇关于描述程序员的文章&#xff0c;但是一直没能开头&#xff0c;一来因为文笔不好&#xff0c;更主要的原因是貌似对程序员既熟悉又不熟悉&#xff0c;很怕写出来的是以偏概全&#xff0c;给大家造成对程序…

TinyMind人工智能社区5月热门技术文章排行榜TOP15

本文整理了TinyMind人工智能社区&#xff08;https://www.tinymind.cn/&#xff09;5月文章排行榜TOP15,欢迎大家阅读收藏。 1、谈谈Python那些不为人知的冷知识 https://www.tinymind.cn/articles/4158 此文章为系列文章&#xff0c;全集请看【Python冷知识】专辑 https://…

任意排列、组合终极Shell脚本

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;crulat 永夜 #!/bin/bash # permutation_combination.sharg0-1 number${2} eval ary({1..${1}}) length${#ary[]} output(){ echo -n ${ary[${!i}]}; } prtcom(){ nsloop i 0 number1 output ${}; echo…

刚刚!我被产品小姐姐的笔记本深深吸引了....

今天我看到产品小姐姐的一个东西&#xff0c;我惊呆了&#xff0c;因为我好像看到了黑科技&#xff0c;事情是这个样子的....由于加班写代码&#xff0c;在比较疲劳的时候&#xff0c;就站起来随意的在办公室里走走&#xff0c;放松一下自己的脑神经。走到一个产品小姐姐身边&a…

【Qt】解决在linux上使用Qt的媒体模块(Qt += multimedia)缺少模块multimedia的问题

1、问题描述 在ubuntu上使用QAudioInput、QAudioOutput等音频相关的类时&#xff0c;报错。 2、解决方法 1&#xff09;在pro工程文件中添加了 Qt multimedia 2&#xff09;安装multimedia模组 sudo apt install libqt5multimedia* qtmultimedia5-*

设计模式之五 责任链模式(Chain of Responsibility)

2019独角兽企业重金招聘Python工程师标准>>> 一. 场景 相信我们都有过这样的经历&#xff1b; 我们去职能部门办理一个事情&#xff0c;先去了A部门&#xff0c;到了地方被告知这件事情由B部门处理&#xff1b; 当我们到了B部门的时候&#xff0c;又被告知这件事情已…

django 中文乱码或不识别

django是一个不错的WEB开源框架。今天测试&#xff0c;发现有些页面中文乱码&#xff0c;肯定是编码哪儿出了问题。 django配置要修改项目根目录的settings.py中的&#xff1a; TIME_ZONE America/Chicago LANGUAGE_CODE en-us 替换成&#xff1a; TIME_ZONE Asia/Shanghai …

【TX2】安装NVIDIA SDK Manager(JetPack 4.6)后,下载kernel和u-boot源码

1、先确认版本号 官网&#xff1a;L4T 32.6.1 is included as part of JetPack 4.6 2、下载源码 执行同步代码命令&#xff1a; ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_TX2_TARGETS/Linux_for_Tegra$ ./source_sync.sh 根据提示&#xff0c;输入1中查询到的版本号t…

忽略这一点,人工智能变人工智障!

作者 | The Economist译者 | 弯月&#xff0c;责编 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【编者按】当今社会&#xff0c;人工智能已进入我们生活的方方面面&#xff0c;很多人会担心算法的控制权过多&#xff0c;也有人担心数据有偏差的话&…

Loader 入门【Webpack Book 翻译】

原文链接&#xff1a;https://survivejs.com/webpack...翻译计划&#xff1a;https://segmentfault.com/a/11...附言&#xff1a;因为发现书中一些内容单独放出来会比较尴尬&#xff0c;所以会跳过部分章节&#xff0c;当然完整版会全部翻译&#xff0c;已经正在研究原版的网站…

backtrack X server 启动不了

本来安装好了啥事没有的。 自己硬想能不用打startx直接启动X server的 于是加了 if [ -z ... 的代码 到 ~/.xinitrc 结果X server就再也启动不了了 花了2个小时? 检索【inappropriate ioctl for device (25)】 有一篇文章提到了 xinitrc, 我才想起来好像是编辑了这个文件&…

【FFmpeg】windows下的库下载

1、官网 http://ffmpeg.org/ 2、点击下载,选择windows 左侧库下载,右侧源码下载 3、二进制库下载 官方网址:https://www.gyan.dev/ffmpeg/builds/#release-builds 4、gihub上的二进制镜像

19行关键代码,带你轻松入门PaddlePaddle单机训练

刚接触深度学习框架的同学可能会说新入手一个框架是不是会很难?NO&#xff0c;NO&#xff0c;NOPaddlePaddle的宗旨就是“easy to use&#xff01;”PaddlePaddle是百度自研的集深度学习框架、工具组件和服务平台为一体的技术领先、功能完备的开源深度学习平台&#xff0c;有全…

用WinForm/WPF代码来为.NET Core 3.0功能投票

我们在5月报道过微软希望在.NET Core 3.0上运行WinForms和WPF。为了实现这个目标&#xff0c;他们正在构建一个新工具&#xff0c;该工具将允许你投票以决定他们需要把哪些API移植到.NET Core。但是&#xff0c;这不是一次直接进行的投票&#xff0c;而是基于你的应用程序正在使…

【FFmpeg】RTSP、RTMP相关命令及开源项目

一、RTSP转RTMP 海康摄像头:抓取 rtsp 流然后转换成 rtmp 推流出去 主码流 ffmpeg -i “rtsp://[用户名]:[密码]@192.168.1.100/h265/ch1/main/av_stream” -f flv -r 25 -s 1920x1080 -an rtmp://localhost/live/a ffmpeg -i “rtsp://[用户名]:[密码]@192.168.1.100:554/h2…

Day13 python基础---内置函数1

一&#xff0c;内置函数&#xff1a; 1.什么是内置函数 就是python给你提供的&#xff0c;拿来直接用的函数&#xff0c;比如print,input等等&#xff0c;截止到python版本3.6.2,现在pyhton一共为我们提供了69个内置函数。 2.作用域相关 # 作用域相关 ****** # globals() :返回…

百度大脑开放日第三期:四大全新平台、两大场景方案助力开发者逐梦 AI

人工智能正走在从技术攻坚到嵌入大众生活的历史进程中&#xff0c;这离不开千万开发者的助力&#xff0c;但开发者也需要“被赋能”。5 月 30 日&#xff0c;第三期百度大脑开放日在深圳微漾国际创客空间如期举行&#xff0c;再一次向开发者、行业人士展现了百度大脑的 AI 技术…

SQuirreL SQL Client 使用记录

如果您的工作要求您在一天之中连接许多不同的数据库 &#xff08;oracle、DB2、mysql、postgresql、Sql Server等等&#xff09;&#xff0c;或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。 简单介…

使用Zabbix通过BMC管理口监控HP服务器

概述 本文的环境&#xff1a;Zabbix版本为3.4&#xff0c;一台Server&#xff0c;一台Porxy&#xff0c;一台agent。Porxy主动抓取agent的状态并sender到Server。 首先需要保证服务器的BMC口能够联网&#xff0c;并且拥有管理用户和密码&#xff0c;Proxy和agent能够保持联网。…

刚刚,百度宣布王海峰升任CTO

作者 | 夕颜、一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;5 月 31 日&#xff0c;百度宣布&#xff0c;百度原高级副总裁王海峰升任百度 CTO&#xff0c;成为百度在组织大变革中一批“敢打硬仗”的代表人物得到晋升的典型。在百度人事动荡之…

【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

FFmpeg结构体详解 一、FFmpeg中最关键的结构体之间的关系1、解协议(http,rtsp,rtmp,mms)2、解封装(flv,avi,rmvb,mp4)3、解码(h264,mpeg2,aac,mp3)4、存数据二、结构体详解1、AVCodec 是存储编解码器信息的结构体。1.1 enum AVMediaType type1.2 enum AVCodecID id1.3 co…

大一新生,你为何逃课?

昨晚不知在哪看到对现在大学生的描述&#xff0c;说现在的大学生30%的时间在应对无聊的思政课&#xff0c;30%的时间在忙着考英语等级&#xff0c;剩下40%的时间在忙着花前月下&#xff0c;“还忙不过来”&#xff0c;虽然不是全部大学生都这样&#xff0c;但也确实有不少的学生…

【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat

FFmpeg结构体详解 7、AVStream8、AVPacket9、AVOutputFormat7、AVStream AVStream 是存储每一个视频/音频流信息的结构体。 重要的变量如下所示: int index: 标识该视频/音频流 AVCodecContext *codec: 指向该视频/音频流的AVCodecContext(它们是一一对应的关系) AVR…

谷歌 Fuchsia 上手体验,将取代Android/win10

2019独角兽企业重金招聘Python工程师标准>>> 在手机市场领域&#xff0c;Google表现很抢眼&#xff0c;毫无疑问&#xff0c;Android 至今在移动操作系统的市场份额占据绝对领先地位&#xff0c;但是 Android 仍然存在不少问题&#xff0c;碎片化问题严重&#xff0…