Android View绘制机制

------------------------------------------------------------------------------

   GitHub:lightSky

   微博:    light_sky , 即时分享最新技术,欢迎关注

------------------------------------------------------------------------------


前言

该篇文章来自一个开源项目 android-open-project-analysis,该项目的目的是分析优秀开源项目的实现原理。在此项目中我分析的是 ViewPagerIndicator  ,其中涉及到了View的绘制机制,因此抽取出来,以便后期的其它Buddy分析类似的项目时可以直接引用,就不必再重复讲述这一块内容了。相同的,该开源项目单独建立了一个 tech目录,用于放置那些公共的知识点,View绘制流程只是其中之一,其它的还有 依赖注入动态代理,后期还会有其它方面的知识点。大家可以持续关注,目前第一期的工作正在进行收尾,大家可以看看其它的开源项目,分析的都很用心,后面紧接着第二期和第三期并行,会有更多的开源项目原理分析。大家可以持续关注该项目 android-open-project-analysis ,欢迎大家star、watch,下面就进入正文。

View绘制机制
1. View树的绘图流程

整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),这里就不做延展了,我们只介绍在自定义View中直接涉及到的一些部分,整个流程如下
viewdrawflow img

View绘制流程调用链
view_draw_method_chain img
图片来自 https://plus.google.com/+ArpitMathur/posts/cT1EuBbxEgN

2. 概念

参考文献:http://developer.android.com/guide/topics/ui/how-android-draws.html

当Activity接收到焦点的时候,它会被请求绘制布局。Android framework将会处理绘制的流程,但Activity必须提供View层级的根节点。绘制是从根节点开始的,需要measure和draw布局树。绘制会遍历和渲染每一个与无效区域相交的view。相反,每一个ViewGroup负责绘制它所有的子视图,而最底层的View会负责绘制自身。树的遍历是有序的,父视图会先于子视图被绘制,

measure和layout

从整体上来看Measure和Layout两个步骤的执行: MeasureLayout img

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值