Android中onInterceptTouchEvent(),Ontouch(),onTouchEvent()

本文详细阐述了Android中Touch事件的传递机制,包括onInterceptTouchEvent与onTouchEvent的区别与联系,以及它们之间的执行顺序。文章解释了事件如何从ViewGroup传递到View,并探讨了返回值如何影响事件的传递流程。

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

遵循一个原则:onTouch是自上而下传递,而onInterceptTouch却是由下而上传递的 

至于三者之间的执行顺序,将在下面详细阐述:
整体上看,事件传递顺序为ViewGroup::onInterceptTouchEvent() –> ViewGroup或View的onTouchEvent() –> Activity::onTouchEvent()

由于上面每个事件回调方法的返回值不同,导致事件本身及顺序发生微妙变化。下面以返回值为主线来详细阐述:
需要注意以下两点:
Android事件传递机制【Touch事件】
1、onInterceptTouchEvent()返回true,那么这个方法只会拦截动作ACTION_DOWN。
2、onInterceptTouchEvent()负责事件分发(事件传递方向),onTouchEvent()负责事件处理(消费) 
________________________________________________________________________________________________________________________________
由于onInterceptTouchEvent()的机制比较复杂,上面的说明写的也比较复杂,总结一下,基本的规则是: 
1.       down事件首先会传递到onInterceptTouchEvent()方法 
2.       如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。 
3.       如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。 
4.       如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理。 
5.       如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。
________________________________________________________________________________________________________________________________
 android继承activity不能重写onInterceptTouchEvent?
Activity 不是父类视图是没有onInterceptTouchEvent这个回掉方法的
Android里面只有可以作为双亲的视图才会有onInterceptTouchEvent
意思是阻止子事件向子视图传递,如果你是想截获Touch事件的话可以重写
Activity的dispatchTouchEvent,这个是表层的Touch的第一入口 
———————————————————————————————————————————————————————————————————————————

转载连接:http://orgcent.com/android-touch-event-mechanism/
 
                  http://blog.youkuaiyun.com/hyp712/article/details/8777835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值