ViewPager 和 SwipeRefreshLayout 的滑动冲突
如题,当SwipeRefreshLayout
包裹ViewPager
时,发现ViewPager经常滑不动,容易把上面的刷新的小圈圈拽出来,只有手指在屏幕上向斜上方滑或者水平滑动,才能保持正常,这是一个滑动冲突问题。
首先上网查一下别人怎么解决的
好像都是这个解决方案:
viewPager.setOnTouchListener(new View.OnTouchListener() { public boolean (View v, MotionEvent event) { |
问题
嗯,代码看起来很美好,但是运行的时候发现,当下拉的手速比较慢时,刷新不能用了,说明SwipeRefreshLayout没有拦截到事件,然后到ViewPager这儿,就被禁用了。 其实看一下SwipeRefreshLayout的源码就能发现问题:
在SwipeRefreshLayout的构造器里有这么一句
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() |
然后在onInterceptTouchEvent()
方法中有这么一段:
final float yDiff = y - mInitialDownY; |
好了,问题如此清晰明了,当我们下拉的时候比较慢,第一次手指在y轴滑动的距离还不够mTouchSlop
那么长,所以没有拦截,那viewpager秒秒钟给它禁掉了,因为我们在上面重写了ViewPager的触摸事件,之后yDiff的距离够长了,但是它已经被禁掉啊,然后就会出现只有一个半透明的小球滑下来,然后收上去了,什么也没发生……
解决方案
其实,这个滑动冲突的问题的关键在于,当手指向斜下方滑动时,手指在屏幕上移动的x轴的距离大于y轴的距离,这个时候我们是想让viewpager响应的,那重写SwipeRefreshLayout的onInterceptTouchEvent()
方法就好了啊,当滑动X轴的距离大于Y轴的距离就让SwipeRefreshLayout不要拦截事件,完整的代码如下:
public 大专栏 ViewPager 和 SwipeRefreshLayout 的滑动冲突yword">class ReformSwipRefreshLayout extends SwipeRefreshLayout { |
ViewPager 和 SwipeRefreshLayout 的滑动冲突的更多相关文章
- 滑动ViewPager引起swiperefreshlayout刷新的冲突
ViewPager是Android中提供的页面切换的控件,SwipeRefreshLayout是Android提供的下拉刷新控件,通过SwipeRefreshLayout可以很简单的实现下拉刷新的功能 ...
- 解决ViewPager与百度地图滑动冲突
一.问题描述 ViewPager中嵌套百度地图的时候会出现百度地图滑动冲突. 二.期望结果: 滑动地图的时候只有地图滑动,滑动其他区域可以切换viewpager. 三.解决方法 自定义viewpage ...
- (转载)Android滑动冲突的完美解决
Android滑动冲突的完美解决 作者:softwindy_brother 字体:[增加 减小] 类型:转载 时间:2017-01-24我要评论 这篇文章主要为大家详细介绍了Android滑动冲突的完 ...
- ViewPager和SwipeRefreshLayout之间嵌套使用时发生"事件"冲突
有时候我们会有一种需求,一个ViewPager有n个页面,每个页面是一个Fragment,在Fragment中使用了具有垂直滑动属性的控件,比如SwipeRefreshLayout!!! 这时二者之间 ...
- android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题. 我的问题原型: 这个问题,我相信遇到的人会比较少,我是在 一个 viewPager 中,其中 一个 fragment 中实现了 ...
- (转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌 ...
- 扩展ViewFlow避免和ViewPager滑动冲突,同时支持无限循环,并完美和CircleFlowIndicator结合
首先,为了避免滑动冲突,我们要继承ViewFlow,重写onInterceptTouchEvent public class MyViewFlow extends ViewFlow { private ...
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
/** * 解决ScrollView嵌套ViewPager出现的滑动冲突问题 */ public class ScrollView1 extends ...
- Android ScrollView与ViewPager滑动冲突
前段时间做项目碰到在ScrollView里添加ViewPager,但是发现ViewPager的左右滑动和ScrollView的滑动冲突了,解决这个问题的方法是重写ScrollView. 代码: pub ...
随机推荐
- share团队冲刺4
团队冲刺第四天 昨天:进行各种按钮的操作,自定义按钮颜色形状 今天:设置布局,账号密码的输入,选择框 问题:无
- offer(背包问题、DP)
蒜头君很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.蒜头君没有多少钱,总共只攒了n万元 ...
- 吴裕雄--天生自然 JAVA开发学习:基本数据类型
public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println ...
- ssh登录脚本
#!/usr/bin/expect set timeout 100 set passwd "your password" spawn shell expect "key& ...
- 【转】Rendering Problems The following classes could not be instantiated
xml 设计时警告 打开es/values/目录下styles.xml文件. 把:<style name="AppTheme" parent="Theme.AppC ...
- nginx出现No input file specified.
在lnmp上调试php项目,之前已经在上面测试过tp5框架,可以正常访问.但新项目由于项目中有些路径是写固定路径的.为了不去修改代码.配置新项目的时候,为新项目设置新的目录.问题就出现了,网页提示 ...
- Centos7安装Xrdp远程桌面
Xrdp是Microsoft远程桌面协议RDP的一个开源实现,它允许以图像方式控制远程系统. 测试环境 服务端: CentOS Linux release 7.7.1908 (Core) 客户端: W ...
- Windows 常用配置 - 启用长路径
Windows 启用长路径支持 打开注册表编辑器:regedit 找到如下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSyte ...
- 使用tomcat方式实现websocket即时通讯服务端讲解
使用tomcat方式实现websocket即时通讯服务端讲解 第一种方案:使用Tomcat的方式实现 tomcat版本要求:tomcat7.0+.需要支持Javaee7 导入javeee-api的ja ...
- Ubuntu更改源地址列表
1. 备份源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 2.打开源列表 sudo gedit /etc/apt/sour ...