自定义View(9)ViewGroup - 第五大布局容器
自定义ViewGroup - 流式布局 TagLayout
1. View的绘制流程
这里上篇已经讲过了,这里简单对绘制流程做个总结。
- View的绘制流程的Measure方法:
第一步performMeasure(),用于指定和测量Layout中的所有控件的宽高,对于ViewGroup,先去测量子孩子,再根据子孩子的宽高计算自己的宽高。
第二步performLayout(),使用for循环摆放不是GONE的子布局,调用child.layout方法。如果重写View不需要重写onLayout,如果重写容器,需要重写onLayout。
第三步performDraw(),使用了模版设计模式,用于绘制自己和子View,分为七步,包括绘制背景、绘制内容、绘制子View、绘制装饰等。对于ViewGroup首先绘制自己的背景,for循环绘制子View的draw()方法,对于View绘制自己的背景,绘制自己的显示内容。
通过View的绘制流程,问题思考:
- 如果要获取View的高度,前提肯定是需要调用测量方法(Measure),测量完毕之后才能获取宽高。
- View的绘制流程是在onResume()之后才开始的。
- addView setVisibility 等等方法时,会调用requestLayout();重新走一遍View的绘制流程。
- 优化的时候,一般是根据源码去优化的,不要布局嵌套等。例如之前讲的调用invalidate()就会重绘所有的View,通过阅读源码,我们知道不能平凡的调用,会影响性能。
2. 根据源码思考和优化
3. onMeasure()测量和onLayout()的摆放
4. 最后的测试和任务布置
原文地址:https://blog.csdn.net/xunyan6234/article/details/140843463
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!