ViewGroup中的onInterceptTouchEvent和onTouchEvent调用时序

本文探讨了在Android开发中遇到的滑动菜单项目里ScrollView与Fragment结合使用时手势滑动不响应的问题。详细分析了事件传递机制,包括onInterceptTouchEvent与onTouchEvent的交互逻辑及如何影响子视图的触摸事件接收。

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

最近在做android类似slidemenu项目,遇到了scrollerview在fragment中没有响应手势滑动的动作

仔细研究了下并参考别人的研究成果

基本的规则是:
1. ondown事件总是会先走onInterceptTouchEvent()方法

2. 如果ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后[color=red]返回false[/color],那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。[color=red]会传递到目标view中去。[/color]

3. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后[color=red]return true[/color],那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,[color=red]目标view将接收不到任何事件[/color]。

4. 如果最终需要处理事件的view的onTouchEvent()返回了false(没有消费该事件),那么该事件将被传递至其上一层次的view(父view层)的onTouchEvent()处理。

5. 如果最终需要处理事件的view 的onTouchEvent()返回了true(已消费事件),那么后续事件将可以继续传递给该view的onTouchEvent()处理。


onInterceptTouchEvent返回true的时候,表示事件被拦截,只在根view中响应相关touch事件
onInterceptTouchEvent返回false的时候,表示没有拦截,子view正常响应事件
onTouchEvent返回false的时候,表示事件没有被消费,事件会顺序上传到parentview去。
onTouchEvent返回true的时候,表示事件已消费,事件不会再作传递。

参考 :http://www.blogjava.net/TiGERTiAN/archive/2011/02/22/344869.html
http://blog.youkuaiyun.com/bigapple88/article/details/7658938
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值