View是如何被添加到屏幕窗口上
系統(tǒng)會創(chuàng)建一個頂層布局容器DecorView,它是一個ViewGroup容器繼承與Framlayout,是phoneWindow對象持有的一個實例,它是所有程序的頂層View,在系統(tǒng)內(nèi)部進行初始化。當DecorView初始化完成之后,系統(tǒng)會根據(jù)應用程序的主題特性加載一個基礎容器,例如:NoActionBar,不同的主題加載的基礎容器不一樣。但是不管怎樣一定會有一個id為content的容器,這個容器為Framlayout,而我們設置的setContentView就是被解析添加到了這個Framlayout當中。
事件的定義
定義:當用戶觸摸屏幕時,將產(chǎn)生的觸摸行為(Touch事件)
事件類型
MotionEvent.ACTION_DOWN 手指剛接觸屏幕
MotionEvent.ACTION_UP 手指從屏幕松開
MotionEvent.ACTION_MOVE 手指在屏幕上滑動
MotionEvent.ACTION_CANCEL 非人為因素取消
事件序列
正常情況下,一次手指觸摸屏幕的行為會觸發(fā)一系列點擊事件
- 點擊屏幕后立即松開,事件序列為DOWN->UP
- 點擊屏幕滑動一會再松開,事件序列為DOWN->MOVE->···MOVE->UP
13212816.png
事件分發(fā)的對象
- Activity:控制生命周期 & 處理事件
- ViewGroup:一組View的集合(含多個子View)
- View:所有UI組件的基類
事件分發(fā)主要方法
- dispatchTouchEvent(MotionEvent ev):用來進行事件分發(fā)
- onInterceptTouchEvent(MotionEvent ev): 判斷是否攔截事件(只存在ViewGroup中)
- onTouchEvent(MotionEvent ev): 處理點擊事件
事件分發(fā)模型
事件分發(fā)模型.png