前言
学习源码,研究源码编程思想,是程序开发者进阶的必经之路。然而,进了源码世界,就像是进了迷失森林,没有地图,迟早要死在里面。有个地图会好很多。
此类文集,专门用图解编程的方式,来讲解一个知识点,从一个点切入,理解切入点之后,再进行知识发散。
路漫漫,进阶之路不好走。与众君共勉之。
正文
我们自定义一个View,可能会重写onMeasure,onLayout,onDraw. OnMeasure的作用是"自定义定规则"来决定自身的大小. 那我们重写了onMeasure之后,到底发生了什么事?
先写一点基础知识作为铺垫
在Android中,一个View从来不是一个单独个体,它是View树结构的一部分。系统在生成View树的时候,会从顶端开始递归,一直到最深处的View。而测量Measure,也是从树根
到叶子节点
的过程。有时候,子View和它的父ViewGroup的大小在一定条件下是可以相互影响的。
比如:
如果父ViewGroup是固定宽高,那么子View的可绘制区域,最大也就是父的边界了。
如果父ViewGroup是wrap_content,那么就会受到子测量结果的影响,这时候如若子view很大,那么父也会被撑大。
如果父ViewGroup是math_parent,那么父 已经是它自己可以达到的最大宽了,那么子最大也只能是父的最大宽高.
并且,Measure在一个View的生命周期中,可能出现多次
具体规则可以具体去查其他网络资料,在这里不赘述了。
一张图从过程看到结论
view的measure过程.jpg
网友评论