控件架構(gòu)
Android 每個(gè)控件都會(huì)在界面中占據(jù)一塊矩形區(qū)域闸溃,而在 Android 中,控件大致被分為兩類 —— ViewGroup 和 View表蝙。
ViewGroup 是 View 的父控件乓旗。
View 的測(cè)量
Android 在繪制 View 前,必須對(duì) View 進(jìn)行測(cè)量汇跨,即讓系統(tǒng)知道要繪制一個(gè)多大的 View妆距。
這個(gè)過(guò)程在 onMeasure() 中執(zhí)行。
執(zhí)行 View 測(cè)量的類是 —— Measure 類塞颁,測(cè)量模式分為以下三種:
- EXACTLY:精確值模式
- AT_MOST:最大值模式
- UNSPECIFIDE:不指定 View 大小進(jìn)行測(cè)量吸耿,View 想多大就多大,通常在繪制自定義 View 時(shí)使用伴网。
View 類默認(rèn)的 onMeasure() 方法只支持 EXACTLY 模式妆棒。
View 的繪制
繪制 View 要重寫(xiě) onDraw() 方法,并使用系統(tǒng)提供的繪制 2D View 的 Canvas 對(duì)象动分。
創(chuàng)建 Canvas 對(duì)象時(shí)要傳入一個(gè) bitmap 參數(shù)红选,使之與創(chuàng)建的 Canvas 畫(huà)布緊密聯(lián)系在一起,這一步稱為“裝載畫(huà)布”坟乾。
這個(gè) bitmap 存儲(chǔ)所有在 Canvas 上繪制的像素信息。
ViewGroup 的繪制
ViewGroup 會(huì)管理其子 View甚侣,其中就會(huì)管理其子 View 的大小。
ViewGroup 在測(cè)量時(shí)會(huì)通過(guò)遍歷所有子 View印荔,從而調(diào)用子 View 的 Measure 方法來(lái)獲取每個(gè)子 View 的測(cè)量結(jié)果宗兼。
ViewGroup 的繪制
ViewGroup 不需要繪制,但是 ViewGroup 會(huì)使用 dispatchDraw() 方法來(lái)繪制其子 View染苛,其過(guò)程是通過(guò)遍歷所有子 View主到,并調(diào)用子 View 的繪制方法完成繪制工作。