(二)Android View的繪制流程

1娘香、Activity窗口結(jié)構(gòu)

activity窗口結(jié)構(gòu)

2办龄、窗口機制

1)Window

每一個Activity都包含一個Window對象,Window對象通常由PhoneWindow實現(xiàn)诀姚,Window位于 /sdk/sources/android-27/android/view/Window.java玷禽。該類是一個抽象類呀打,提供了繪制窗口的一組通用API贬丛「椋可以將之理解為一個載體,各種View在這個載體上顯示恭应。

2)PhoneWindow

位于//sdk/sources/android-27/com/android/internal/policy/impl/PhoneWindow.java耘眨。該類繼承于Window類,是Window類的具體實現(xiàn)胆屿,即我們可以通過該類具體去繪制窗口偶宫。并且,該類內(nèi)部包含了一個DecorView對象憎兽,該DectorView對象是所有應(yīng)用窗口(Activity界面)的根View结闸。 簡而言之,PhoneWindow類是把一個FrameLayout類即DecorView對象進(jìn)行一定的包裝,將它作為應(yīng)用窗口的根View蔫耽,并提供一組通用的窗口操作接口。

它是Android中的最基本的窗口系統(tǒng)匙铡,每個Activity 均會創(chuàng)建一個PhoneWindow對象鳖眼,是Activity和整個View系統(tǒng)交互的接口。

3)DecorView

是PhoneWindow類的內(nèi)部類(后面版本將DecorView拿出來了)矿瘦。該類是一個FrameLayout的子類,并且是PhoneWindow的子類缚去,該類就是對普通的FrameLayout進(jìn)行功能的擴(kuò)展,更確切點可以說是修飾(Decor的英文全稱是Decoration枕荞,即“修飾”的意思),比如說添加TitleBar(標(biāo)題欄)搞动,以及TitleBar上的滾動條等 。DecorView是當(dāng)前Activity所有View的祖先矗烛,它并不會向用戶呈現(xiàn)任何東西狮惜,它主要有如下幾個功能,可能不全:

A.? Dispatch ViewRoot分發(fā)來的key虱而、touch、trackball等外部事件牡拇;

B.? DecorView有一個直接的子View穆律,我們稱之為System Layout,這個View是從系統(tǒng)的Layout.xml中解析出的,它包含當(dāng)前UI的風(fēng)格剔蹋,如是否帶title、是否帶process bar等泣崩÷蹇冢可以稱這些屬性為Window decorations。

C.? 作為PhoneWindow與ViewRoot之間的橋梁买优,ViewRoot通過DecorView設(shè)置窗口屬性。//可以這樣獲取 View view = getWindow().getDecorView();

D.? DecorView只有一個子元素為LinearLayout烘跺。代表整個Window界面,包含通知欄液荸,標(biāo)題欄脱篙,內(nèi)容顯示欄三塊區(qū)域绊困。DecorView里面TitleView:標(biāo)題,可以設(shè)置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一個id為content的FrameLayout秤朗。我們平常在Activity使用的setContentView就是設(shè)置在這里,也就是在FrameLayout上

3硝皂、繪制流程

大多數(shù) Android 開發(fā)都知道自定義 View 需要關(guān)注的幾個方法:onMeasure()作谭、onLayout()?和?onDraw(),這其實也是每個 View 至關(guān)重要的繪制流程贝或。

當(dāng)一個應(yīng)用啟動時會啟動一個主Activity锐秦,Android會根據(jù)Activity的布局對它進(jìn)行繪制,從根視圖ViewRoot的performTraversals()方法開始酱床,從上到下遍歷整顆視圖樹,每個View控件負(fù)責(zé)繪制自己慷垮;而ViewGroup還需要通知自己的子View進(jìn)行繪制。視圖的繪制過程可以分為三個步驟:測量(Measure)汤纸、布局(Layout)、繪制(Draw)贮泞。

參考資料:https://www.cnblogs.com/liushilin/p/11006315.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囊蓝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狡恬,老刑警劉巖蝎宇,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兔乞,居然都是意外死亡凉唐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門淡溯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玄坦,“玉大人,你說我怎么就攤上這事豺总≡穸” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵表伦,是天一觀的道長慷丽。 經(jīng)常有香客問我,道長要糊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任勺拣,我火速辦了婚禮鱼填,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苹丸。我一直安慰自己,他們只是感情好羊苟,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布蜡励。 她就那樣靜靜地躺著阻桅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稽寒。 梳的紋絲不亂的頭發(fā)上趟章,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天蚓土,我揣著相機與錄音,去河邊找鬼蜀漆。 笑死,一個胖子當(dāng)著我的面吹牛绷耍,可吹牛的內(nèi)容都是我干的鲜侥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼病袄,長吁一口氣:“原來是場噩夢啊……” “哼搂赋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起基公,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胰伍,沒想到半個月后酸休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑司,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡渗饮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年互站,在試婚紗的時候發(fā)現(xiàn)自己被綠了胡桃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磕潮。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡自脯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闺兢,到底是詐尸還是另有隱情,我是刑警寧澤戏罢,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布桐磁,位于F島的核電站讲岁,受9級特大地震影響衬以,放射性物質(zhì)發(fā)生泄漏看峻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一衙吩、第九天 我趴在偏房一處隱蔽的房頂上張望互妓。 院中可真熱鬧,春花似錦坤塞、人聲如沸冯勉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灼狰。三九已至,卻和暖如春浮禾,著一層夾襖步出監(jiān)牢的瞬間交胚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工伐厌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留承绸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓挣轨,卻偏偏與公主長得像军熏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卷扮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容