Android事件分发机制

本文深入解析Android中事件分发机制,包括MotionEvent的四种主要类型:ACTION_DOWN、ACTION_MOVE、ACTION_CANCEL和ACTION_UP。阐述了事件如何在Activity、ViewGroup和View之间传递,以及dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法在事件分发过程中的协作作用。

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

事件分发的对象是:事件
当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件)。
主要发生的Touch事件有如下四种:
MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
MotionEvent.ACTION_MOVE:滑动View
MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
MotionEvent.ACTION_UP:抬起View(与DOWN对应)

事件分发的本质
将点击事件(MotionEvent)向某个View进行传递并最终得到处理
即当一个点击事件发生后,系统需要将这个事件传递给一个具体的View去处理。这个事件传递的过程就是分发过程。

事件在Activity、ViewGroup、View之间进行传递
一个点击事件产生后,传递顺序是:Activity(Window) -> ViewGroup -> View

Android的UI界面是由Activity、ViewGroup、View及其派生类组合而成的
在这里插入图片描述
View是所有UI组件的基类
一般Button、ImageView、TextView等控件都是继承父类View

ViewGroup是容纳UI组件的容器,即一组View的集合(包含很多子View和子VewGroup)
VewGroup也是View的子类
是Android所有布局的父类或间接父类:项目用到的布局(LinearLayout、RelativeLayout等),都继承自ViewGroup,即属于ViewGroup子类
与普通View的区别:ViewGroup实际上也是一个View,只不过它多了可以包含子View和定义布局参数的功能。

事件分发过程由dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()方法协作完成的
在这里插入图片描述

方法详细介绍
在这里插入图片描述

super:调用父类方法
true:消费事件,即事件不继续往下传递
false:不消费事件,事件也不继续往下传递 / 交由给父控件onTouchEvent()处理

dispatchTouchEvent()
使用对象:Activity、ViewGroup、View
作用:分发点击事件
调用时刻:当点击事件能够传递给当前View时,该方法就会被调用
返回结果:是否消费当前事件,详细情况如下:
默认情况:根据当前对象的不同而返回方法不同
①Activity super.dispatchTouchEvent() 即调用父类ViewGroup的dispatchTouchEvent()
②ViewGroup onIntercepTouchEvent() 即调用自身的onIntercepTouchEvent()
③View onTouchEvent() 即调用自身的onTouchEvent()

onTouchEvent()
使用对象:Activity、ViewGroup、View
作用:处理点击事件
调用时刻:在dispatchTouchEvent()内部调用
返回结果:是否消费(处理)当前事件(与dispatchTouchEvent()类似)

onInterceptTouchEvent()
使用对象:ViewGroup(注:Activity、View都没该方法)
作用:拦截事件,即自己处理该事件
调用时刻:在ViewGroup的dispatchTouchEvent()内部调用
返回结果:是否拦截当前事件,详细情况如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值