自定義View(View的繪制流程一)

背景

我們想要自定義View那么首先就得先明白View的工作流程和原理,知道它是怎么繪制出的。

初始ViewRoot和DecorView

View的繪制主要是三大流程统刮,measure表牢,layout,draw這三個(gè)過(guò)程斩狱,那么View又是怎么與我們的Activity所關(guān)聯(lián)起來(lái)的呢耳高?
ViewRoot對(duì)應(yīng)于ViewRootImpl類,他是連接WindowManager和DecorView的紐帶所踊,View的三大流程都是由它來(lái)完成的泌枪。當(dāng)Activity創(chuàng)建的時(shí)候DecorView會(huì)被添加到Window里面,同時(shí)也會(huì)創(chuàng)建ViewRootImpl對(duì)象秕岛,并將這個(gè)對(duì)象與DecorView建立連接碌燕。
root = new ViewRootImpl(View.getContext(),display); root.setView(view,wparams,panelParentView);

perfromTraversals流程

View的繪制流程是從ViewRoot的preformTraversals方法開始的误证,他經(jīng)過(guò)measure、layout修壕、draw三個(gè)過(guò)程最終將View繪制出來(lái)愈捅,其中measure用來(lái)測(cè)量View的寬和高,layout用來(lái)確定View在父容器中的放置位置,而draw則負(fù)責(zé)將View繪制在屏幕上包个,主要流程如下:削樊。

preformTraversals.png

這樣preformTraversals它就會(huì)依次調(diào)用 preformMeasure , preformLayout和preformDraw這三個(gè)方法,三個(gè)方法的流程分別從父容器傳遞到子容器譬巫,如此反復(fù),就完成了整個(gè)View的遍歷督笆。

簡(jiǎn)單總結(jié)

measure決定了View的寬\高芦昔,Measure完成之后可以通用過(guò)getMeasureHeight和getMwasureWidth來(lái)獲得View的高度和寬度,在幾乎多有的情況下他就是View 最終的寬高娃肿,但是特殊情況除外咕缎,Layout的過(guò)程決定了View的四個(gè)定點(diǎn)的位置和實(shí)際的View的寬\高,完成之后可以通過(guò) getTop料扰,getBottom凭豪,getLeft,getRight來(lái)獲取View四個(gè)方向上的坐標(biāo)记罚,并通過(guò)getWidth和getHeight來(lái)獲得View的最終的寬高墅诡,Draw則決定了View的顯示,只有draw方法完成之后View才會(huì)真正的顯示在布局上 桐智。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末末早,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子说庭,更是在濱河造成了極大的恐慌然磷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刊驴,死亡現(xiàn)場(chǎng)離奇詭異姿搜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)捆憎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門舅柜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人躲惰,你說(shuō)我怎么就攤上這事致份。” “怎么了础拨?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵氮块,是天一觀的道長(zhǎng)绍载。 經(jīng)常有香客問(wèn)我,道長(zhǎng)滔蝉,這世上最難降的妖魔是什么击儡? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蝠引,結(jié)果婚禮上阳谍,老公的妹妹穿的比我還像新娘。我一直安慰自己螃概,他們只是感情好边坤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谅年,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肮韧。 梳的紋絲不亂的頭發(fā)上融蹂,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音弄企,去河邊找鬼超燃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拘领,可吹牛的內(nèi)容都是我干的意乓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼约素,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼届良!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起圣猎,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤士葫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后送悔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慢显,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年欠啤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荚藻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洁段,死狀恐怖应狱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眉撵,我是刑警寧澤侦香,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布落塑,位于F島的核電站,受9級(jí)特大地震影響罐韩,放射性物質(zhì)發(fā)生泄漏憾赁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一散吵、第九天 我趴在偏房一處隱蔽的房頂上張望龙考。 院中可真熱鬧,春花似錦矾睦、人聲如沸晦款。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缓溅。三九已至,卻和暖如春赁温,著一層夾襖步出監(jiān)牢的瞬間坛怪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工股囊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袜匿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓稚疹,卻偏偏與公主長(zhǎng)得像居灯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子内狗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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