Android的View体系(六):梳理总结View绘制的全流程

Android的View体系(六):梳理总结View绘制的全流程,第1张

概述一.储备知识1.1ViewRoot定义连接器,对应于ViewRootImpl类作用连接WindowManager和DecorView完成View的三大流程:measure、layout、draw特别注意//在主线程中,Activity对象被创建后://1.自动将DecorView添加到Window中&创建ViewRootImpll对象root=newVi 一. 储备知识1.1 VIEwRoot定义
连接器,对应于VIEwRootImpl类作用
连接WindowManager 和 DecorVIEw
完成VIEw的三大流程: measure、layout、draw特别注意
// 在主线程中,Activity对象被创建后:// 1. 自动将DecorVIEw添加到Window中 & 创建VIEwRootImpll对象root = new VIEwRootImpl(vIEw.getContent(),display);// 3. 将VIEwRootImpll对象与DecorVIEw建立关联root.setVIEw(vIEw,wparams,panelParentVIEw)
1.2 DecorVIEw定义:顶层VIEw

即 AndroID 视图树的根节点;同时也是 FrameLayout 的子类

作用:显示 & 加载布局

VIEw层的事件都先经过DecorVIEw,再传递到VIEw

特别说明
内含1个竖直方向的linearLayout,分为2部分:上 = 标题栏(Titlebar)、下 = 内容栏(content)

在Activity中通过 setContentVIEw()所设置的布局文件其实是被加到内容栏之中的,成为其唯一子VIEw =
ID为content的FrameLayout中

// 在代码中可通过content得到对应加载的布局// 1. 得到contentVIEwGroup content = (VIEwGroup)findVIEwByID(androID.R.ID.content);// 2. 得到设置的VIEwVIEwGroup rootVIEw = (VIEwGroup) content.getChildAt(0);
1.3 Window、Activity、DecorVIEw 与 VIEwRoot的关系简介

之间的关系

二. 绘制准备回忆上图,可看出最后1步 = 绘制

但在绘制前,系统会有一些绘制准备,即前面几个步骤:创建PhoneWindow类、DecorVIEw类、VIEwRootmpl类等。主要包括:DecorVIEw创建 & 显示三. 绘制流程概述

从上可知,VIEw的绘制流程开始于:VIEwRootImpl对象的performTraversals()

源码分析

/**  * 源码分析:VIEwRootImpl.performTraversals()  */  private voID performTraversals() {  		// 1. 执行measure流程        // 内部会调用performMeasure()        measureHIErarchy(host, lp, res,desireDWindowWIDth, desireDWindowHeight);        // 2. 执行layout流程        performlayout(lp, mWIDth, mHeight);        // 3. 执行draw流程        performDraw();    }
从上面的performTraversals()可知:VIEw的绘制流程从顶级VIEw(DecorVIEw)VIEwGroup开始,一层一层从VIEwGroup至子VIEw遍历测绘

即:自上而下遍历、由父视图到子视图、每一个 VIEwGroup 负责测绘它所有的子视图,而最底层的 VIEw 会负责测绘自身

绘制的流程 = measure过程、layout过程、draw过程,具体如下:

下面,我将详细讲解VIEw绘制的三大流程:measure过程、layout过程、draw过程

四. 详细介绍4.1 Measure 过程作用
测量VIEw的宽 / 高

1.在某些情况下,需要多次测量(measure)才能确定VIEw最终的宽/高;
2.该情况下,measure过程后得到的宽 / 高可能不准确;
3.此处建议:在layout过程中onLayout()去获取最终的宽 / 高

具体流程

4.2 Layout过程作用
计算视图(VIEw)的位置

即计算VIEw的四个顶点位置:left、top、Right 和 Bottom

具体流程

4.3 Draw过程

作用
绘制VIEw视图

具体流程

至此,关于VIEw的工作流程讲解完毕。

点赞收藏分享文章举报

手指尖的按恋发布了83 篇原创文章 · 获赞 37 · 访问量 5万+私信 关注 总结

以上是内存溢出为你收集整理的Android的View体系(六):梳理总结View绘制的全流程全部内容,希望文章能够帮你解决Android的View体系(六):梳理总结View绘制的全流程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存