【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践
介绍
Android的View是树形构造的:
根本概念
在介绍View的三大年夜流程之前,我们必须先介绍一些根本的概念,才能更好地舆解这全部过程。
Window的概念
1.根据各自的测量规矩遍历Children元素,调用getChildMeasureSpec办法获得Child的measureSpec;
View的工作流程主如果指measure、layout、draw这三大年夜流程,即测量、构造和绘制,个中measure肯定View的测量宽高,layout根据测量的宽高肯定View在其父View中的四个顶点的地位,而draw则将View绘制到屏幕上,如许经由过程ViewGroup的递归遍历,一个View树就展如今屏幕上了。说的简单,下面带大年夜家一步一步大年夜源码平分析:
经由过程以上代码,DecorView的MeasureSpec的产生过程就很明白了,因为DecorView是FrameLyaout的子类,属于ViewGroup,对于ViewGroup来说,除了完成本身的measure过程外,还会遍历去调用所有子元素的measure办法,各个子元素再递归去履行这个过程。和View不合的是,ViewGroup是一个抽象类,他没有重写View的onMeasure办法,这里很好懂得,因为每个具体的ViewGroup实现类的功能是不合的,若何测量应当让它本身决定,比如LinearLayout和RelativeLayout。
Window表示的是一个窗口的概念,它是站在WindowManagerService角度上的一个抽象的概念,Android中所有的视图都是经由过程Window来竽暌箍现的,不管是Activity、Dialog照样Toast,只要有View的处所就必定有Window。
关于Window这方面的内容,我们这里先懂得一个大年夜概
DecorView的概念
DecorView是全部Window界面的最顶层View,View的测量、构造、绘制、事宜分发都是由DecorView往下遍历这个View树。DecorView作为顶级View,一般情况下它内部会包含一个竖直偏向的LinearLayout,在这个LinearLayout琅绫擎有高低两个部分(具体情况和Android的版本及主题有关),膳绫擎是【标题栏】,下面是【内容栏】。在Activity中我们经由过程setContentView所设置的构造文件其实就是被加载到【内容栏】中的,而内容栏的id是content,是以指定构造的办法叫setContent().

ViewRoot的概念
ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大年夜流程均是经由过程ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完之后,会讲DecorView添加到Window中,同时会创建对应的ViewRootImpl,并将ViewRootImpl和DecorView建立接洽关系,并保存到WindowManagerGlobal对象中。
- WindowManagerGlobal.java
- root = new ViewRootImpl(view.getContext(), display);
- root.setView(view, wparams, panelParentView);

Java
View的绘制流程是大年夜ViewRoot的performTraversals办法开端的,它经由measure、layout和draw三个过程才能最终将一个View绘制出来,大年夜致流程如下图:

Measure测量
这里须要留意的是,这个抽象的Window概念和PhoneWindow这个类并不是同一个器械,PhoneWindow表示的是手机屏幕的抽象,它充当Activity和DecorView之间的序言,就算没有PhoneWindow也是可以展示View的。
为了更好地舆解View的测量过程,我们还须要懂得MeasureSpec,它是View的一个内部类,它表示对View的测量规格。MeasureSpec代表一个32位int值,高2位代表SpecMode(测量模式),低30位代表SpecSize(测量大年夜小),我们可以看看它的具体实现:
- MeasureSpec.java
- public static class MeasureSpec {
- private static final int MODE_SHIFT = 30;
- private static final int MODE_MASK = 0x3 << MODE_SHIFT;
- /**
- * UNSPECIFIED 模式:
- * 父View
推荐阅读
在处理矢量化数据时,记录中往往话苄很多反复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不但滑或不相符标准。是以要经由过程某种规矩,在包管矢量曲线>>>详细阅读
本文标题:Android View绘制的三大流程
地址:http://www.17bianji.com/lsqh/36843.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示