View, ViewGroup, Layout

簡(jiǎn)述:

? ? ? Android 應(yīng)用中的所有用戶界面元素都是使用View和ViewGroup對(duì)象構(gòu)建而成。View對(duì)象用于在屏幕上繪制可供用戶交互的內(nèi)容堵泽。ViewGroup對(duì)象用于儲(chǔ)存其他View(和ViewGroup)對(duì)象修己,以便定義界面的布局。

視圖的繪制過(guò)程:

? ? ? 通常我們自定義控件時(shí)迎罗,需要繼承View或者ViewGroup或者它們的子類(lèi)睬愤,然后實(shí)現(xiàn)特定的方法即可。如下圖所示纹安,通常我們關(guān)注下面3個(gè)方法即可實(shí)現(xiàn)簡(jiǎn)單的View的繪制尤辱,視圖在加載的時(shí)候就包括了測(cè)量(onMeasure),布局(onLayout)钻蔑,繪畫(huà)(onDraw)這幾個(gè)過(guò)程啥刻。

觸摸事件的分發(fā)機(jī)制:

? ? ? 通常我們需要對(duì)用戶的觸摸事件進(jìn)行相應(yīng)的處理來(lái)實(shí)現(xiàn)特定的效果,下面分析下Android中觸摸事件的分發(fā)機(jī)制咪笑。Android將基本觸摸動(dòng)作都封裝在了MotionEvent類(lèi)里面可帽,用戶在觸摸屏幕時(shí),首先會(huì)觸發(fā)down事件窗怒,根據(jù)down事件的是否消費(fèi)映跟,后續(xù)的事件處理也不盡相同蓄拣。下圖是一個(gè)activity,一個(gè)父布局(ParentViewGroup)中包含了一個(gè)子布局(ChildViewGroup)努隙,子布局中又包含了一個(gè)view的事件處理過(guò)程球恤。

(1)down事件在整個(gè)過(guò)程中都沒(méi)有被消費(fèi)。如上圖第一行荸镊,事件從Activity----->ParentViewGroup----->ChildViewGroup-->View,然后再?gòu)腣iew反向傳遞給了Activity咽斧。既然down傳遞給我這些視圖,而這些視圖沒(méi)有一個(gè)去消費(fèi)躬存,所以對(duì)于UP和MOVE事件就只在Activity中處理张惹,不再向下傳遞。如上圖第一行最后一個(gè)圖岭洲。

(2)down事件在整個(gè)處理過(guò)程中有被消費(fèi)宛逗,則立刻停止向下傳遞,并且以后的MOVE和UP事件和DOWN事件的處理流程一致盾剩。

?(3) 接口返回true是消費(fèi)雷激,返回false是沒(méi)有消費(fèi)繼續(xù)傳遞。在ViewGroup中多了個(gè)攔截器(onInterceptTouchEvent),在View中沒(méi)有告私,因?yàn)閂iewGroup可能有子View屎暇,它是用來(lái)決定是否繼續(xù)傳遞給子View的。

布局及性能優(yōu)化:

? ? ?說(shuō)到布局德挣,我們一般會(huì)想起下面這張圖恭垦。我們布局中的XML文件就是這種結(jié)構(gòu),這張圖越扁平格嗅,布局的層級(jí)越少番挺,布局的性能越好。下圖是一種has-A的關(guān)系屯掖,不是is-A的關(guān)系玄柏。


? ? ? 關(guān)于布局的優(yōu)化網(wǎng)上有很多,我在這里羅列一些贴铜,其實(shí)還是上面的那句話“這張圖越扁平粪摘,布局的層級(jí)越少,布局的性能越好”绍坝。

? ? (1)減少布局的層級(jí)徘意,查看層級(jí)一般有兩種方法。

? ? ? a, 在手機(jī)上開(kāi)發(fā)者選項(xiàng)中打開(kāi)“調(diào)試GPU過(guò)度繪制”開(kāi)關(guān)轩褐,看過(guò)度渲染層級(jí)(藍(lán)色椎咧、淡綠、淡紅、深紅代表了4種不同程度的Overdraw 情況勤讽,我們的目標(biāo)就是盡量減少紅色Overdraw蟋座,看到更多的藍(lán)色區(qū)域)具體方法google。

? ? ? ?b脚牍,使用HierarchyViewer查看布局層次向臀,我們可以在Android的sdk的tools目錄下找到這個(gè)工具。

? ? ?(2)使用<merge\>標(biāo)簽,避免引入多余的層級(jí)

? ? ?(3)使用ViewStub對(duì)一些不常用的標(biāo)簽诸狭,在使用的時(shí)候加載

? ? ?(4)Drawable對(duì)象不要Xml中設(shè)置background券膀,在代碼中動(dòng)態(tài)設(shè)置

? ? ?(5)使用include標(biāo)簽,主要作用是代碼復(fù)用

結(jié)語(yǔ):

本文簡(jiǎn)單記錄了視圖和布局的基礎(chǔ)知識(shí)驯遇。其中細(xì)節(jié)遠(yuǎn)不止于此三娩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妹懒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌双吆,老刑警劉巖眨唬,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異好乐,居然都是意外死亡匾竿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蔚万,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岭妖,“玉大人,你說(shuō)我怎么就攤上這事反璃£腔牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵淮蜈,是天一觀的道長(zhǎng)斋攀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)梧田,這世上最難降的妖魔是什么淳蔼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮裁眯,結(jié)果婚禮上鹉梨,老公的妹妹穿的比我還像新娘。我一直安慰自己穿稳,他們只是感情好存皂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著司草,像睡著了一般艰垂。 火紅的嫁衣襯著肌膚如雪泡仗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天猜憎,我揣著相機(jī)與錄音娩怎,去河邊找鬼。 笑死胰柑,一個(gè)胖子當(dāng)著我的面吹牛截亦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柬讨,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崩瓤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了踩官?” 一聲冷哼從身側(cè)響起却桶,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔗牡,沒(méi)想到半個(gè)月后颖系,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辩越,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年嘁扼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔攒。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趁啸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出督惰,到底是詐尸還是另有隱情不傅,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布姑丑,位于F島的核電站蛤签,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栅哀。R本人自食惡果不足惜震肮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望留拾。 院中可真熱鬧戳晌,春花似錦、人聲如沸痴柔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至豪嚎,卻和暖如春搔驼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侈询。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工舌涨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扔字。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓囊嘉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親革为。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扭粱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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