android 之view的測量和繪製(群英傳讀書筆記1)
View的測量
android通過onMeasure()方法去測量一個View的大小,在這裡面系統給我們提供了一個MeasureSpec的類,我們可以通過他來繪製我們的View,看下原始碼
MeasureSpec 是一個32位的int值,其中高2位為測量的模式,低30位的胃測量大小,
測量模式(三種):
(1)EXACTLY:精確值模式 給控制元件設定具體值的時候android:layout_width=“100dp”或者“match_parent”的
(2)AT_MOST :最大值模式 控制元件為wrap_content的時候,此時控制元件尺寸隨著子控制元件或者內容變化,但是尺寸不能超過父控制元件;
(3)UNSPECIFIED :未指明大小的測量模式,View要多大有多大,多在自定義控制元件使用
注:在onMeasure()方法中只支援EXACTLY模式,所以不重寫這個方法時候,只能讓View支援Match_parent或者你指定的100dp的數值,像使用wrap_content 就要重寫此方法
super.onMeasure(widthMeasureSpec, heightMeasureSpec)點進去可以看到
我們只要把寬和高設定好填進去就可以完成測量工作,所以我們只要在onMeasure()之後把引數設定給 setMeasuredDimension(widthSize , heightSize);方法就可以,
在onMeasure()中,我們呼叫自定義的MeasureWidth()和MeasureHeight(),來重新定義寬高,引數則是寬和高的MeasureSpec的物件,他的物件包含了測量模式和測量值的大小。
我們以ListView的onMeasure()方法為例來進行介紹下如何自定義測量值:
(1) 從MeasureSpec中拿出具體的的測量模式和大小,程式碼:
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
(2)通過判斷測量的模式,給出不同的測量值。當specMode為EXACTLY時直接指定大小,為其他的模式的時候要給一個預設的大小,尤其是wrap_content的時候,要取出widthSize,或者是heightSize的最小的一個作為最後的測量值,
具體的可能還需要我們進去看。。。
下面是模板
通過這個我們就可以對寬和高的值去自定義了,
最後可以分三種情況去測試下,
(1)佈局中,指定寬和高都是400dp
(2) 指定寬和高為match_parent,
(3)使用wrap_content, (注:這裡可以看到我們的view是一個200*200px的一個正方形,因為我們在程式碼中有設定預設的大小widthMeasureSpec = 200)
View的繪製
ViewGroup的測量:
ViewGroup的繪製:
相關文章
- Android自定義View之Paint繪製文字和線AndroidViewAI
- Android View繪製原理:繪製流程排程、測算等AndroidView
- 深入理解 Android 之 View 的繪製流程AndroidView
- 星白贈書之讀書筆記(1)筆記
- Android View繪製流程AndroidView
- Android原始碼分析之View繪製流程Android原始碼View
- View的繪製二:View的繪製流程View
- Android View的繪製過程AndroidView
- 初·Android View的繪製流程AndroidView
- Android視窗管理分析(4):Android View繪製記憶體的分配、傳遞、使用AndroidView記憶體
- Android測量佈局繪製的起點Android
- 初探Android的View繪製過程AndroidView
- FPGA讀書筆記1FPGA筆記
- Android 中 View 繪製流程分析AndroidView
- 《Docker容器和容器雲》讀書筆記(1)Docker筆記
- XtraBackup官方文件讀書筆記和測試筆記
- WCF的傳輸安全(讀書筆記)筆記
- 讀書筆記之五筆記
- Android View 原始碼解析(三) – View的繪製過程AndroidView原始碼
- View繪製01-Android渲染系統中的ViewViewAndroid
- 【Android原始碼】View的繪製流程分析Android原始碼View
- Android繪製View的過程研究——計算View的大小AndroidView
- 讀書筆記-資訊收集1筆記
- 2018.03.15、View 繪製流程學習 筆記View筆記
- 你需要知道的 Android View 的繪製AndroidView
- 《Pro Android Graphics》讀書筆記之第一節Android筆記
- 《Pro Android Graphics》讀書筆記之第六節Android筆記
- 《Pro Android Graphics》讀書筆記之第三節Android筆記
- 《Pro Android Graphics》讀書筆記之第四節Android筆記
- 《Pro Android Graphics》讀書筆記之第五節Android筆記
- 《Pro Android Graphics》讀書筆記之第二節Android筆記
- 【讀書筆記】Android平臺的漏洞挖掘和分析筆記Android
- HenCoder Android 自定義 View 1-5: 繪製順序AndroidView
- Android進階(五)View繪製流程AndroidView
- Android View 繪製流程(Draw) 完全解析AndroidView
- Android View繪製13問13答AndroidView
- 《禪者的初心》讀書筆記(1)筆記
- 諾埃爾的讀書筆記1筆記