自定义View学习摘要笔记(三)

学习资料:1、Canvas之translate、scale、rotate、skew方法讲解!
2、安卓自定义View教程
3、《android群英传》徐宜生
4、Android Canvas的save(),saveLayer()和restore()浅谈
5、Approximate a circle with cubic Bézier curves

事件分发机制原理

View的结构:
自定义View学习摘要笔记(三)_第1张图片
1、主题颜色和标题栏等内容就是显示在DecorView中的
2、简单来说,Window是一个抽象类,是所有视图的最顶层容器,视图的外观和行为都归他管,不论是背景显示,标题栏还是事件处理都是他管理的范畴,它其实就像是View界的太上皇(虽然能管的事情看似很多,但是没实权,因为抽象类不能直接使用)。

而 PhoneWindow 作为 Window 的唯一亲儿子(唯一实现类),自然就是 View 界的皇帝了,PhoneWindow 的权利可是非常大大,不过对于我们来说用处并不大,因为皇帝平时都是躲在深宫里面的,虽然偶尔用特殊方法能见上一面,但想要完全指挥 PhoneWindow 为你工作是很困难的。

而上面说的 DecorView 是 PhoneWindow 的一个内部类,其职位相当于小太监,就是跟在 PhoneWindow 身边专业为 PhoneWindow 服务的,除了自己要干活之外,也负责消息的传递,PhoneWindow 的指示通过 DecorView 传递给下面的 View,而下面 View 的信息也通过 DecorView 回传给 PhoneWindow。

事件分发、拦截与消费

自定义View学习摘要笔记(三)_第2张图片

事件分发流程

1、点击 View1 区域但没有任何 View 消费事件

自定义View学习摘要笔记(三)_第3张图片
自定义View学习摘要笔记(三)_第4张图片
自定义View学习摘要笔记(三)_第5张图片

2、点击 View1 区域且事件被 View1 消费
自定义View学习摘要笔记(三)_第6张图片

3、点击 View1 区域但事件被 ViewGroupA 拦截
自定义View学习摘要笔记(三)_第7张图片

NOTE:判断事件是否被消费是根据返回值,而不是根据你是否使用了事件。true 表示消费,false 表示不消费,与是否使用了事件无关。

你可能感兴趣的:(Android)