美文网首页
关于measure

关于measure

作者: 依依语玥 | 来源:发表于2017-09-19 11:01 被阅读0次

子View的MeasureSpec的值是由(子View的布局参数(LayoutParams)和父容器的MeasureSpec值)计算得来的,具体逻辑

/*

*@paramspec  父View的详细测量值

*@parampadding  View当前尺寸的内边距和外边距

*@paramchildDimension  子视图的布局参数

*@returna MeasureSpec integer for the child

*/

public static intgetChildMeasureSpec(intspec, intpadding, intchildDimension)

根据View的类型measure过程主要分为两种情况

(1)单一View的measure过程

1. measure过程:该方法被final修饰,不可以被覆写

基本测量逻辑的判断(先判断是否是强制测量、测量模式改变了没有,再判断是否强制测量、忽略缓存)

if (是否强制测量  ||  是否需要重新测量(测量模式有没有改变)) {

if (mMeasureCache缓存中没有取到值 || 是否忽略缓存) {

onMeasure();

}

}

2. onMeasure()过程:

setMeasureDimension()

getDefaultSize()

getSuggestedMinimumWidth()

因此:在自定义控件时候,如果没有重写onMeasure方法,同时给控件设置wrap_content属性时,控件默认会显示match_parent效果。

其中:

mMeasureCache中存储通过传入的widthMeasureSpec和heightMeasureSpec计算得出的key值信息,即view的信息。

(longkey = (long) widthMeasureSpec <<32| (long) heightMeasureSpec &0xffffffffL;)

mPrivateFlags用于记录了View的各种状态位。

(2)ViewGroup的measure过程

1. measureChildren()

for (遍历ViewGroup中的所有子View) {

if (View不是GONE状态) {

measureChild()

}

}

2.measureChild()

measureSpec = 通过getChildMeasureSpec()方法获取到当前Child的MeasureSpec的值

measure(measureSpec);

3.  getChildMeasureSpec()  

根据父布局的MeasureSpec和当前View的尺寸决定当前View的MeasureSpec

4.  measure()

总结

单一View的measure过程与ViewGroup过程最大的不同:单一View对onMeasure()具有统一的实现,而ViewGroup没有

若LinearLayout的子View设置了weight,会进行两次measure计算,会比较耗时,所有当LinearLayout的子View需要使用weight的时候,最好替换成RelativeLayout布局

相关文章

  • 关于measure

    子View的MeasureSpec的值是由(子View的布局参数(LayoutParams)和父容器的Measur...

  • 常用英语单词分类速记(111)

    Measure 测量 Measure 测量(动) Measure 计量单位/测量标准 Measurement 测量...

  • Android View的绘制流程

    一、measure过程 ViewGroup measure过程 View的measure()方法是final的,无...

  • View的绘制原理

    一、measure过程 1、View的measure过程 View的measure方法是一个final方法,不可重...

  • Android布局绘制

    二、View的测量Measure 父View的measure方法会调用子View的measure方法,让子View...

  • Linux指令

    vcgencmd命令 vcgencmd measure_temp vcgencmd measure_volts core

  • measure

    if you can not measure it, you can not improve it

  • measure

    @The act or process of assigning numbers to phenomena acc...

  • Measure

    A box This box has three dimensions,length、width and heig...

  • Measure

    本文主要android View绘制三大流程(measure、layout、draw)中的measuer流程。如何...

网友评论

      本文标题:关于measure

      本文链接:https://www.haomeiwen.com/subject/ijlwsxtx.html