view绘制:测量过程&measureSpec

2019-05-31  本文已影响0人  崽子猪

进入View---> measureHierarchy()

measureHierarchy() --- > getRootMeasureSpec()

调用getRootMeasureSpec这个方法来获取它的宽高根的MeasureSpec


getRootMeasureSpec()

MeasureSpec是定义在一个View类当中的一个静态内部类,它其实就是代表了一个限定池

UNSPECIFIED:表示我们的父View不会对子View有任何的约束.这样子View就可以打到我们想要的最大尺寸
EXACTLY:父View为子View指定了一个尺寸,无论子View想要多大都必须在这个尺寸最大值的边界内
AT_MOST:为子View指定了一个最大尺寸,那么就要确保他所有的子子View都在最大范围内

MeasureSpec
measureHierarchy()--->performMeasure() 进行下一步的测量计算

mView 就是 DetorView:

performMeasure
performMeasure() --- > measuer() 看一下具体的算法

这个方法最终会调用一个onMeasure(int , int )方法

measuer measuer
measuer() ---> onMeasure(int , int )

onMeasure()这个方法是可以被覆写的,所以说当我们在自定义View的时候直接覆写这个方法就好了

根据这两个限定好的值去计算View的宽和高
要根据不同的模式进行不同的计算
内部会调用setMeasedDimension()这个方法是测量阶段最终的一个方法,它会得到一个具体的尺寸.

onMeasure
上一篇下一篇

猜你喜欢

热点阅读