第五大容器佈局——流式佈局
①、performLayout :View -> layout() -> onLayout()
②、擺放子佈局 for迴圈所有子View, 前提不是GONE,呼叫child.layout()
③、performDraw() : View -> draw() -> drawBackground();//畫背景
onDraw(canvas);// 畫自己 ViewGroup 預設情況下不會呼叫
dispatchDraw(canvas);// 畫子View 不斷的迴圈呼叫子View的 draw()
面試 [ View的繪製流程]
第一步 performMeasure():用於指定和測量layout中所有控制元件的寬高,對於ViewGroup,先去測量裡面的子孩子,根據子孩子的寬高再來計算和指定自己的寬高,對於View,它的寬高是由自己和父佈局決定的。
第二步 performLayout(): 用於擺放子佈局,for迴圈所有子View,用child.layout()擺放ChildView
第三步 performDraw(): 用於繪製自己還有子View , 對於ViewGroup首先繪製自己的背景,for迴圈繪製子View呼叫子View的draw()方法, 對於View繪製自己的背景,繪製自己顯示的內容(TextView)
思考問題:
如果要獲取View的高度,前提肯定需要呼叫測量方法,測量完畢之後才能獲取寬高
View的繪製流程是在 onResume() 之後才開始(Activity 啟動流程的原始碼)
addView setVisibility 等等 會呼叫requestLayout(); 重新走一遍View的繪製流程
優化的時候,根據知道原始碼寫程式碼的時候優化, onDraw() 不要佈局巢狀,等等
1.流式佈局:我之前寫過二篇文章:http://blog.csdn.net/qq_24675479/article/details/78921070,動態新增流式佈局http://blog.csdn.net/qq_24675479/article/details/78928339這裡不闡述了
2.自定義View和ViewGroup套路總結
2.1 自定義View的套路:
2.1.1 自定義屬性,獲取自定義屬性(達到配置的效果)
2.1.2 onMeasure()方法用於測量計算自己的寬高,前提是繼承自View,如果是繼承自系統已有的 TextView , Button ,已經給你計算好了寬高
2.1.3 onDraw() 用於繪製自己的顯示
2.1.4 onTouch() 用於與使用者互動
2.2 自定義ViewGroup的套路:
2.2.1 自定義屬性,獲取自定義屬性(達到配置的效果)很少有
2.2.2 onMeasure() 方法,for迴圈測量子View,根據子View的寬高來計算自己的寬高
2.2.3 onDraw() 一般不需要,預設情況下是不會呼叫,如果你要繪製需要實現dispatchDraw()方法
2.2.4 onLayout() 用來擺放子View,前提是不是GONE的情況
2.2.5 在很多情況下不會繼承自ViewGroup ,往往是繼承 系統已經提供好的ViewGroup 如 ViewPager ScrollView RelativeLayout
相關文章
- 移動佈局基礎之 流式佈局
- 流式佈局管理器
- 自定義流式佈局:ViewGroup的測量與佈局View
- AutoFlowLayout:多功能流式佈局與網格佈局控制元件控制元件
- CSS佈局 --- 居中佈局CSS
- css佈局-float佈局CSS
- 快速利用RecyclerView的LayoutManager搭建流式佈局View
- 居中佈局、三欄佈局
- qt 佈局---表單佈局QT
- java:佈局方法(流佈局)Java
- flex佈局(彈性佈局)Flex
- 佈局技巧:合併佈局
- 快速學習掌握移動Web開釋出局總結(流式佈局+flex伸縮佈局+rem佈局+Boostrap框架 )(更新中)WebFlexREM框架
- flutter系列之:在flutter中使用流式佈局Flutter
- 直播網站程式原始碼,FlowLayoutManager 流式佈局網站原始碼
- Android實現RecyclerView巢狀流式佈局AndroidView巢狀
- CSS 佈局之水平居中佈局CSS
- CSS佈局之三欄佈局CSS
- 浮動佈局 和 flex佈局Flex
- CSS佈局 --- 自適應佈局CSS
- CSS佈局 --- 等寬&等高佈局CSS
- 彈性佈局(伸縮佈局)
- 佈局
- CSS經典佈局——聖盃佈局與雙飛翼佈局CSS
- CSS佈局–聖盃佈局和雙飛翼佈局以及使用Flex實現聖盃佈局CSSFlex
- css佈局系列1——盒模型佈局CSS模型
- 佈局管理器——相對佈局
- 聖盃佈局?雙飛翼佈局?
- 網頁佈局------幾種佈局方式網頁
- CSS 三欄佈局之聖盃佈局和雙飛翼佈局CSS
- flex彈性佈局 響應式佈局Flex
- 三欄佈局之自適應佈局
- CSS 兩欄佈局和三欄佈局CSS
- 聖盃佈局與雙飛翼佈局
- dispaly的Grid佈局與Flex佈局Flex
- 聖盃佈局和雙飛翼佈局
- 雙飛翼佈局和聖盃佈局
- CSS經典佈局之Sticky footer佈局CSS