解决ScrollView嵌套RecyclerView无法滑动的问题

通过View事件的拦截方法解决ScrollView嵌套RecyclerView无法滑动的问题

前提:这里先介绍两个View的方法

onInterceptTouchEvent方法(只有ViewGroup才有)
返回true: 代表对事件进行拦截, 拦截后事件就无法传到子View中, 也就是无法调用子View的onTouchEvent等方法,
返回false: 代表不对事件进行拦截, 子View可以接收到所有事件(包括Down, Move, UP)

requestDisallowInterceptTouchEvent方法,父容器可以调用此方法来确定是否要拦截当前事件
返回true: 表示子View不需要父视图拦截事件, 就不会调用父容器的onInterceptTouchEvent方法
返回false: 表示子View需要父视图拦截事件, 会继续执行父容器的onInterceptTouchEvent方法

测试ScrollView在哪里将事件进行拦截了

这里通过自定义ScrollView和他的子View,其中MyScrollView重写了onInterceptTouchEvent方法,
MyTextView重写了onTouchEvent方法, 经过调试可以发现:

MyScrollView:
这里写图片描述

MyTextView:
这里写图片描述

  1. ScrollView的onInterceptTouchEvent 方法默认返回时结果如下:
    这里写图片描述

可以发现ScrollView拦截了MyTextView的UP事件
具体可以在ScrollView中可以搜到onInterceptTouchEvent 方法,发现的确对UP事件进行了处理
这里写图片描述

也尝试下另外两种情况,看是否和前提中写的一样

  1. ScrollView的onInterceptTouchEvent 方法返回false时结果如下:
    这里写图片描述
    对MyTextView的onTouchEvent方法的所有事件都不进行拦截

  2. ScrollView的onInterceptTouchEvent 方法返回true时结果如下:
    这里写图片描述
    发现拦截了MyTextView的所有事件

发现所有返回结果都如前提中说明的一致
然后解决RecyclerView无法滑动的问题, 这里的思路是, 在触发RecyclerView 事件的时候设置父ScrollView的requestDisallowInterceptTouchEvent为true, 让其不再调用onInterceptTouchEvent 从而实现对RecyclerView事件的不拦截, 实现如下:
这里写图片描述
这里写图片描述

通过这次的测试,对View事件传递理解的也更加的深刻。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值