高级自定义viwe系列三;如何测量自身大小?

作者:波澜步惊
链接:https://www.jianshu.com/p/10e60415ca7b

前言

学习源码,研究源码编程思想,是程序开发者进阶的必经之路。然而,进了源码世界,就像是进了迷失森林,没有地图,迟早要死在里面。有个地图会好很多。
此类文集,专门用图解编程的方式,来讲解一个知识点,从一个点切入,理解切入点之后,再进行知识发散。
路漫漫,进阶之路不好走。与众君共勉之。

高级自定义view系列文章,都为学员波澜步惊在学习高级进阶课程的过程中所吸收和思考的知识,尤其对于从事Android开发3-5年,处于瓶颈期需要寻找突破和进阶方向的小伙伴们一定有所启发和帮助的

高级自定义viwe系列思维脑图;

正文

我们自定义一个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的生命周期中,可能出现多次

具体规则可以具体去查其他网络资料,在这里不赘述了。

最后;一张图从过程看到结论!

高级自定义viwe系列三;如何测量自身大小?_第1张图片

你可能感兴趣的:(自定义View)