View的绘制流程

http://www.jianshu.com/p/5a71014e7b1b  博客地址


View的绘制如果你有所了解,
基本分为measure、layout、draw 过程,其中比较难理解就是measure过程。

Measure过程:(绘制过程)
对于View的测量,肯定会和MeasureSpec接触,
这个MeasureSpec 封装的是父容器传递给子容器的布局要求,而不是父容器对子容器的布局要求,“传递” 两个字很重要,
更精确的说法应该这个MeasureSpec是由父View的MeasureSpec和子View的LayoutParams通过简单的计算得出一个针对子View的测量要求,
这个测量要求就是MeasureSpec。

* MeasureSpec一共有三种模式:
UPSPECIFIED : 父容器对于子容器没有任何限制,子容器想要多大就多大(不确定测量模式)
EXACTLY: 父容器已经为子容器设置了尺寸,子容器应当服从这些边界,不论子容器想要多大的空间。(精确测量模式)
AT_MOST:子容器可以是声明大小内的任意大小(最大测量模式)


我们编码方便的时候,google就要帮我们计算你match_parent的时候是多大,
wrap_content的是多大,这个计算过程,就是计算出来的父View的MeasureSpec不断往子View传递,
结合子View的LayoutParams 一起再算出子View的MeasureSpec,然后继续传给子View,不断计算每个View的MeasureSpec,
子View有了MeasureSpec才能更测量自己和自己的子View。


简单的理解:
1、如果父View的MeasureSpec 是EXACTLY,说明父View的大小是确切的,
(确切的意思很好理解,如果一个View的MeasureSpec 是EXACTLY,那么它的size 是多大,最后展示到屏幕就一定是那么大)。
2、如果父View的MeasureSpec 是AT_MOST,说明父View的大小是不确定,
最大的大小是MeasureSpec 的size值,不能超过这个值。
3、如果父View的MeasureSpec 是UNSPECIFIED(未指定),表示没有任何束缚和约束,
不像AT_MOST表示最大只能多大,不也像EXACTLY表示父View确定的大小,子View可以得到任意想要的大小,不受约束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值