通俗易懂说Android view事件传递机制

本文详细解释了Android中事件传递的原理,从外到内、从内到外的传递顺序,以及事件消费的概念。介绍了View的事件传递流程,从onTouchEvent开始,如果返回true则事件被消费。接着讨论了ViewGroup的事件传递,包括onInterceptTouchEvent和onTouchEvent的交互,如何决定事件是否被拦截和消费。

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

事件传递简介

一句话说Android事件传递机制

  • Android中view的事件传递是从外到内然后再从内到外传递的,如果中间有view消费了事件,则终止事件传递。

从外到内?

  • 从外到内说的是事件传递的是从最外层的view(事件是ViewGroup)一层层向其内部childView传递的。

从内到外?

  • 同样的从内到外说的是事件传递的是从最内层的view一层层向其外部parent View传递的。

view事件消费?

  • view事件消费,一般是指当前view处理了当前事件,一般为当前view的onTouchEvent返回true。

具体的事件传递说明

  • Android中view的事件传递分为view的直接子类和ViewGroup的直接子类两种不情况,其中两种相同的地方都会涉及到onTouchEvent()和dispatchTouchEvent(),而viewGroup还涉及到一个方法onIntercpetTouchEvent()。由于view的事件传递相对简单,并且ViewGroup的事件传递还会涉及到View中的事件传递流程(ViewGroup是View的子类,继承了View的特性),所以我们先说说View中事件的传递流程。

View中事件传递流程

  • 当事件从外层ViewGroup传递到View中时,首先调用的是View的dispatchTouchEvent方法,然后再调用View的onTouchEvent(),如果onTouchEvent()方法返回true,则表示当前View会消费该事件,事件传递终止。如果返回false,则会回到当前View的parent View中并调用它的onTouchEvent(),如果onTouchEvent()返回true,则表示当前ViewGroup消费事件,终止事件传递,否则继续向外传递,直到传递到ActivityonTouchEvent()。如下图所示:view中的事件传递流程

View Group中的事件传递流程

  • 当事件传递到ViewGroup时,首先调用dispatchTouchEvent(),在ViewGroup的dispatchTouchEvent()方法中首先会调用onIntercepteTouchEvent()判断是否需要拦截当前事件,返回true表示当前ViewGroup拦截当前事件,不在向下传递,并调用onTouchEvent()方法,如果onTouchEvent()返回true表示当前ViewGroup消费当前事件,终止事件传递,如果onTouchEvent()返回false时,则调用当前ViewGroup的parent View的onTouchEvent()方法,同理如果当前ViewGroup的parent View的onTouchEvent()方法放回true,则表示该view消费当前事件,并且终止事件传递,反之如果当前ViewGroup的parent View的onTouchEvent()方法放回false,则继续向上传递事件。如下图所示:
    viewgroup事件传递流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值