栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 事件分发流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 事件分发流程

Android View树

日常处理的部分为RootView下面的ViewGroup和View部分,那么上面的PhoneWindow、DecorView和RootView是做什么用的呢?RootView本身可以作为上下沟通的桥梁使用。

​ (设计模式-组合模式)

PhoneWindow是Window的实现类,Window是抽象类,DecorView是它的一个内部类。所以,PhoneWindow的大部分消息,都是PhoneWindow通过DecorView传递给下面的View的,同时下面的View传递消息也是通过DecorView回传给PhoneWindow。

Android 事件分发流程

事件的传递过程中,主要有三种情况:事件分发(dispatchTouchEvent)、事件拦截(onInterceptTouchEvent)、事件消费(onTouchEvent)。这三种情况均有一个boolean型的返回值来控制事件的传递流程。

类型相关方法ActivityVeiwGroupView
事件分发dispatchTouchEvent
事件拦截onInterceptTouchEventXX
事件消费onTouchEvent

为什么只有ViewGroup有事件拦截:因为Activity作为事件分发的开始,拦截了就只能自己处理了;而View作为事件分发的最末端,拦不拦截都需要它处理。中间阶段,拦截可做一些处理。

事件传递的顺序:

Activity -> PhoneWindow -> DecorView -> ViewGroup -> View -> Activity

如果我们点击View1,系统如何传递给View1呢,而不是下面的ViewGroupA或者RootView。很明显,我们需要一种机制来执行消息的分发。而消息分发的最小单位是View,ViewGroup是View的子类,Activity是根布局.

1.点击View1区域但是没有任何View1消费事件

2.点击View1区域并被View1消费事件

3.点击View1区域但是事件被ViewGroupA拦截

事件消费与否与具体消费无关,仅由返回值决定,true表示消费,false表示不消费。

,t_70)

事件消费与否与具体消费无关,仅由返回值决定,true表示消费,false表示不消费。

同时,不论View自身是否注册点击事件,只要View可点击就会消费事件。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号