UI绘制流程

作者: 浔它芉咟渡 | 来源:发表于2019-02-26 00:19 被阅读0次
QQ20190225-081715@2x.png

https://www.jianshu.com/writer#/notebooks/14045782/notes/14163616 这篇文章 描述了window的添加过程,这篇继续描述UI的绘制流程

ViewRootImpl 的performTraversals()方法中,分别调用了performMessure,performLayout,performDraw 三个方法,对应我们自定义UI时的最重要的三个方法,onMeassure(), onLayout(),onDraw() 三个方法,开启了DecorView的绘制流程。

  1. performMeasure


    image.png

    在performMeasure方法中,可以看到,调用了mView.measure方法,这个mView就是decorView,将款和高的MeasureSpec信息传入。
    先说一下MeasureSpec的作用,在Measure流程中,系统将View的LayoutParams根据父容器所施加的规则转换成对应的MeasureSpec,通过MeasureSpec来进行统一的测量。

image.png

在measure方法中,又调用了onMeasure方法,进入了View的onMeasure方法中。进入了测量

2.performLayout


image.png

performLayout 方法中,调用了host.layout方法, host的赋值是mView,和performMeasure一样,这个View是decorView,将decorView摆放到屏幕中。

image.png

在host.layout方法中,又调用了onLayout方法,将整个Layout的过程交给了onLayout。
3.performDraw


image.png

performDraw调用了draw方法法。


image.png
draw方法中又调用了 mAttachInfo.mTreeObserver.dispatchOnDraw(); image.png

dispatchOnDraw方法又调用了onDraw()进行了绘制。

注意:在自定义viewGroup的时候,如果想拿到margin,要先复写了generateLayoutParams方法。

相关文章

  • UI绘制流程(1) - 程序启动

    UI绘制流程(1)- 程序启动 UI绘制流程(2) - 布局加载及初始化 之前对于ui绘制方面的知识点比较零...

  • UI绘制流程(2) - 布局加载及初始化

    UI绘制流程(1)- 程序启动 UI绘制流程(2) - 布局加载及初始化 在我们熟悉的oncreate()方法之中...

  • Android性能优化

    1.UI绘制 减少UI绘制时间;减少不必要的子控件或层级;UI的绘制流程:measure-layout-draw,...

  • 源码解读UI绘制流程

    前言:上一回,我们分析到APP启动流程,和一个大概的UI绘制流程,这次,我们来深入学习UI绘制流程,大概分三个阶段...

  • UI绘制流程

    一、从setContentView(R.layout.activity_main);入手了解UI的绘制起始过程 1...

  • UI绘制流程

    在上一篇文章自定义控件中,其实已经比较全面的介绍了自定义控件的知识,在这里,我主要来做一次查漏补缺,以及分享一些阅...

  • UI绘制流程

    一、Activity里面去展示View的时候。进来先setContentView();getWindow().se...

  • UI绘制流程

    一:View是如何被添加到屏幕窗口的。 打开Activity,在oncreat()方法里面,调用了setConte...

  • UI绘制流程

    先找到一ActivityThread类 的handleMessage。

  • UI绘制流程

    上一节已经讲了,绘制流程为测量摆放绘制 Decorview结论: MATCH_PARENT:精确模式,窗口大小 W...

网友评论

    本文标题:UI绘制流程

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