Android View 的事件分发机制

本文深入探讨Android事件分发机制,从Activity到ViewGroup再到View的事件传递过程,详细解释dispatchTouchEvent、onInterceptTouchEvent及onTouchEvent的作用,帮助读者理解点击事件的处理流程。

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

相较其它知识来说事件分发机制还是有一定难度的,属于Android 进阶方面的知识,对于初学者来说,还是很乱的,所以建议先掌握好基础,再想办法进阶。我在学习事件分发机制时,也是反复学习,尤其是第一次看这块,感觉还是很麻烦的,咬着牙看完别人的博客,简单看看源码,看完这后,感觉自己还是没有理解,不过事情总要有个开头吧,所以在那之后,有时间了,再次看,发现收获,还是比之前多些,所以发现有些问题不能着急。

首先事件分发机制的顺序大家需要知道即,Activity -> ViewGroup -> View

三个比较重要的方法

dispatchTouchEvent()  负责事件分发

onInterceptTouchEvent()  负责事件拦截

onTouchEvent()  进行事件处理

如果一个View 点击后响应了点击事件,那么简单谈一谈其流程

当一个点击事件发生时,事件最先传到ActivitydispatchTouchEvent() ,在该方法里会调用Window的superDispatchTouchEvent(ev),在该方法里又会调用DecorView的superDispatchTouchEvent(event),在该方法里又会调用super.dispatchTouchEvent(event),(因为DecorView继承自FrameLayout,所以ViewGroup 为DecorView的父类),所以这一系列调用,最终会调用到ViewGroup 的dispatchTouchEvent()方法,(如果简化的说可以理解为事件传递到ActivitydispatchTouchEvent(),经过一系列方法,传递到ViewGroup 的dispatchTouchEvent())。

然后ViewGroup 调用onInterceptTouchEvent(ev) 返回false 表示不拦截事件,那么遍历其子View 找到正在点击的子View,调用child.dispatchTouchEvent(ev) ,即将事件传递到View 的dispatchTouchEvent() 。

在View 的dispatchTouchEvent() 里调用onTouchEvent(event) ,之后又调用performClick(),在改方法里调用mOnClickListener.onClick(this) 就回调了点击事件,之后伴随着一系列方法的return ,出栈,一次点击事件结束。

简单描述流程图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值