一、右图
布局层次,XML代码样例
<?xml version="1.0" encoding="utf-8"?>
<!-- ViewGroup1 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- ViewGroup2 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="50dp" >
<!-- Button -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
</RelativeLayout>
二、左图
事件原理分析:
每层ViewGroup在事件处理上都涉及到3个重要函数,即dispatchTouchEvent(调度)、onInterceptTouchEvent(拦截)、onTouchEvent(执行)。注意最上层(即最后写的一层如本例中的Button),由于是最后一层所以只涉及2个重要函数dispatchTouchEvent(调度)、onTouchEvent(执行)。
好了我们开始“大话事件流"吧!
有三个和尚(即老大、老二、老三),需要一个人下山挑水。
方丈最先看到了老大。“老大,你下山挑点水吧”。(事件开始了,先看图中红线部分),方丈下达的命令不能反驳呀,应了下来。
1、老大
1.1老大想“我是去呢?还是让别人去呢?”(开始调度)
1.2开始做决定(拦截器)
1.2.1 自己去吧。(执行——>挑水事件完成)(true)
1.2.2我才不去呢,叫别人去吧。(任务转发,看见了老二,让老二去。)(flase)
2、老二
2.1老二想“我是去呢?还是让别人去呢?”(开始调度)
2.2开始做决定(拦截器)
1.2.1 自己去吧。(执行——>挑水事件完成)(true)
1.2.2我才不去呢,叫别人去吧。(任务转发,看见了老三,让老三去。)(flase)
3、老三
由于老三是最小辈分最低的,他无法在让别人去做事了。所以他必须做出的选择去还是不去。
3.1老三想“我是去呢?还是不去呢?”(开始调度,他必须要给出个回复)
3.2回复(执行)
3.2.1好吧!我去吧。(执行——>挑水事件完成)(true)
3.2.2我有事不能去。(回复给老二)
(红色线部分结束,开始看蓝线部分)
1、老二
目前老二没有可分配的人了,他必须给出回复
1.1回复(执行)
1.1.1好吧!我去吧。(执行——>挑水事件完成)(true)
1.1.2我有事不能去。(回复给老大)
2、老大
目前老大没有可分配的人了,他必须给出回复
2.1回复(执行)
2.1.1好吧!我去吧。(执行——>挑水事件完成)(true)
2.1.2方丈呀,挑水这件事我目前做不了。(整个事件无响应)