Android开发事件传递机制详解

本文详细解析了安卓开发中事件的传递机制,包括分派事件、拦截事件和处理事件的过程及返回值的意义,帮助读者更好地理解事件处理流程。

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

作为一名真正的开发者,解决事件冲突不可避免的,作为同行,我希望大家一定要搞懂他的原理才能自如的解决冲突,刚开接触解决事件冲突的时候,通过百度搜索论坛看了很多博客,越看越糊涂,有通过图解的,有通过代码测试上传日志的,更有甚至上传源代码的,我的神啦,源代码,对于刚接触事件的学习者来说,我想阅读代码的能力并不高,本来是解决一个难问题的,又雪上加霜,加入了源代码,难上加难,常人说的,猫吃浆糊越吃越然,哈哈,言归正传,本博客就是让大家很简单的理解安卓开发的事件传递机制。

//分派事件
public boolean dispatchTouchEvent(MotionEvent ev)
//拦截事件 
public boolean onInterceptTouchEvent(MotionEvent ev)
//处理事件
public boolean onTouchEvent(MotionEvent event)

上面就是跟Touch有关的三个方法,已经标的很清楚了,三个功能分派事件,拦截事件,处理事件,而相关的类有Activity,View,ViewGroup。ViewGroup拥有以上三个方法(也就是能当容器的控件,LiearLayout等等),Activity、View(比如button)拥有分派事件和处理事件两个方法,这个要记住。

事件如何传递的大家去搜着看,就是一级级传递给子view,分发顺序为dispatchTouchEvent --- onInterceptTouchEvent --- onTouchEvent

大家注意这三个方法返回值都是布尔类型的,就从这个上做文章讲解:

1、分派事件

返回值为true——事件会分发给当前 View 并由 dispatchTouchEvent 方法进行消费,同时事件会停止向下传递;

返回值为false——表示事件停止传递,并返回,交给上级的onTouchEvent处理;

返回super.dispatchTouchEvent(ev)——事件会自动的分发给当前 View 的 onInterceptTouchEvent 方法。

现在轮到拦截事件出场了

2、拦截事件

返回 true,则表示将事件进行拦截,并将拦截到的事件交由当前 View 的 onTouchEvent 进行处理;

返回 false,则表示将事件放行,当前 View 上的事件会被传递到子 View 上,再由子 View 的 dispatchTouchEvent 来开始这个事件的分发;

3、处理事件

如果接收到要处理事件的命令,开始处理,有两种结果

返回true,则表示事件当前View自己处理并消费;

返回false,那么这个事件会从当前 View 向上传递,并且都是由上层 View 的 onTouchEvent 来接收,上层还是返回false,那么一直向上返回,也就是大家说的冒泡。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值