android viewpager判断滑动方向,Android 从ViewPager嵌套的滑动问题引发的分析

在Android项目中,遇到一个垂直ViewPager嵌套在水平ViewPager中的需求。当上下滑动垂直ViewPager时,一切正常,但在垂直方向边缘水平滑动时,事件处理出现问题。经过分析,发现ViewPager在处理触摸事件时,会判断是否有可水平滑动的子View。在API 14及以上,通过View.canScrollHorizontally方法判断。通过重写垂直ViewPager的canScrollHorizontally方法,解决了嵌套滑动的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的项目主页要做一个这样的结构:

39ef021d8c22

也就是说既要能上下滑,也要能左右滑,也就是上下滑到一个页面再向右滑会有一个衍生页,左滑就会返回。

于是我采用正常viewpager嵌套竖向viewpager(vertical viewpager)的做法,我使用的vertical viewpager github 地址:GitHub - kaelaela/VerticalViewPager: Vertically ViewPager and vertically transformer for Android.实现起来也很简单,不过有现成的轮子,就不用重复的制造了。

可是做完了之后出现了一个问题,viewpager之间不能正确的响应触摸事件:

结构上vertical viewpager嵌套在viewpager里面,是viewpager的子view,当我上下滑动的时候,vertical viewpager能正常相应,可是横向滑动却不行,但是当vertical viewpager滑动到上下顶端和底端时,横向滑动就可以了。

我现在国内查了一下资料,发现遇到嵌套触摸问题的情况很普遍,于是我猜测:viewpager拿到触摸事件之后做了一些判断使得它将触摸事件分发下至vertical viewpager,并且和子viewpager的方向无关。

我们知道触摸事件的分发是沿着父view向下传递于子view的,当viewpager里面是一般的view时不会有这种问题;而当viewpager嵌套可滑动的view时就可能出现这种情况。所以这和vertical viewpager应该没有关系,是viewpager在处理事件分发时的策略导致的。

于是开始阅读源码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值