Android 视图绘制流程完全解析,带你一步步深入了解

View( 二 )

Android 视图绘制流程完全解析,带你一步步深入了解

View( 二) 分类:

Android 疑难解析

2013-12-26 08:30

52106 人阅读

评论 (91)

收藏

举报

AndroidViewonMeasureonLayoutonDraw

目录 (?)[+]

转载请注明出处:

/guolin_blog/article/details在

上一篇文章中,我带着大家一起剖析了一下LayoutInflater

的工作原理,可以算是对View 进行深入了解的第一步吧。

那么本篇文章中,我们将继续对View 进行深入探究,看一

看它的绘制流程到底是什么样的。如果你还没有看过我的上

一篇文章,可以先去阅读Android LayoutInflater原理分析,

带你一步步深入了解

View(

一 )

。相信每个

Android

程序员

都知道,我们每天的开发工作当中都在不停地跟

View

打交

道, Android 中的任何一个布局、任何一个控件其实都是直

接或间接继承自View 的,如 TextView 、Button 、ImageView 、

ListView 等。这些控件虽然是Android 系统本身就提供好的,

我们只需要拿过来使用就可以了,但你知道它们是怎样被绘

制到屏幕上的吗?多知道一些总是没有坏处的,那么我们赶

快进入到本篇文章的正题内容吧。要知道,任何一个视图都

不可能凭空突然出现在屏幕上,它们都是要经过非常科学的

绘制流程后才能显示出来的。每一个视图的绘制过程都必须

经历三个最主要的阶段,即onMeasure() 、onLayout() 和

onDraw() ,下面我们逐个对这三个阶段展开进行探讨。一.

onMeasure()measure是测量的意思,那么onMeasure() 方

法顾名思义就是用于测量视图的大小的。 View 系统的绘制流程会从 ViewRoot 的 performTraversals() 方法中开始,在其内部调用 View 的 measure() 方法。 measure() 方法接收两个参数, widthMeasureSpec 和 heightMeasureSpec ,这两个值分别用于确定视图的宽度和高度的规格和大小。

MeasureSpec的值由 specSize和 specMode共同组成的,

其中 specSize记录的是大小,specMode记录的是规格。

specMode一共有三种类型,如下所示:

1. EXACTLY表示父视图希望子视图的大小应该是由

specSize的值来决定的, 系统默认会按照这个规则来设置子

视图的大小,开发人员当然也可以按照自己的意愿设置成任

意的大小。 2. AT_MOST表示子视图最多只能是specSize

中指定的大小,开发人员应该尽可能小得去设置这个视图,

并且保证不会超过specSize 。系统默认会按照这个规则来设

置子视图的大小,开发人员当然也可以按照自己的意愿设置

成任意的大小。 3. UNSPECIFIED表示开发人员可以将视图

按照自己的意愿设置成任意的大小,没有任何限制。这种情

况比较少见,不太会用到。那么你可能会有疑问了,

widthMeasureSpec和 heightMeasureSpec这两个值又是从

哪里得到的呢?通常情况下,这两个值都是由父视图经过计

算后传递给子视图的,说明父视图会在一定程度上决定子视

图的大小。但是最外层的根视图,它的widthMeasureSpec

和 heightMeasureSpec 又是从哪里得到的呢?这就需要去

分析 ViewRoot中的源码了,观察performTraversals()方法

可以发现如下代码:[java] view

plaincopychildWidthMeasureSpec =

getRootMeasureSpec(desiredWindowWidth, lp.width);

childHeightMeasureSpec =

getRootMeasureSpec(desiredWindowHeight, lp.height);

可以看到,这里调用了getRootMeasureSpec()方法去获取

widthMeasureSpec和 heightMeasureSpec的值,注意方法

中传入的参数, 其中 lp.width 和 lp.height 在创建 ViewGroup

实例的时候就被赋值了,它们都等于MATCH_PARENT。然

android视图绘制流程,android视图绘制流程完全解析带你一步步深入了解view二.docx...相关推荐

  1. Android视图绘制流程完全解析,带你一步步深入了解View(二)

    在上一篇文章中,我带着大家一起剖析了一下LayoutInflater的工作原理,可以算是对View进行深入了解的第一步吧.那么本篇文章中,我们将继续对View进行深入探究,看一看它的绘制流程到底是什么 ...

  2. Android视图状态及重绘流程分析,带你一步步深入了解View(三)

    在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程,了解了视图绘制流程中onMeasure.onLayout.onDraw这三个最重要步骤的工作原理,那么今天我们将继续对View进行深 ...

  3. Android LayoutInflater原理分析,带你一步步深入了解View(一)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 有段时间没写博客了,感觉都有些生疏了呢.最近繁忙的工作终于告一段落, ...

  4. Android自定义View的实现方法,带你一步步深入了解View(四)

    不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,算是把View中很多重要的知识 ...

  5. Android自定义View的实现方法,带你一步步深入了解View

    如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件.组合控件.以及继承控件.那么下面我们就来依次学习一下,每种方式分别是如何自定义View的. 一.自绘控件 自绘控件的意思就 ...

  6. Android 自定义view完全解析--带你通透了解自定义view

    参考转自郭霖博客带你一步步深入了解View系列 Android LayoutInflater原理分析 相信接触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用 ...

  7. Android LayoutInflater原理分析,带你一步步深入了解View

    Android视图绘制流程完全解析,带你一步步深入了解View(一) 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 ...

  8. Android LayoutInflater原理分析,带你一步步深入了解View(一) 郭霖学习摘要

    2019独角兽企业重金招聘Python工程师标准>>> public class MainActivity extends Activity {//----------------- ...

  9. Android视图绘制流程完全解析,带你一步步深入了解

    Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了解View(二) Android视图状态及重绘流程分析,带你 ...

  10. android自定义view流程,Android 自定义View--从源码理解View的绘制流程

    前言 在Android的世界里,View扮演着很重要的角色,它是Android世界在视觉上的具体呈现.Android系统本身也提供了很多种原生控件供我们使用,然而在日常的开发中我们很多时候需要去实现一 ...

最新文章

  1. 【 C 】字符串函数专题
  2. Codeforces 1108 E2(线段树+思维)
  3. Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头
  4. 复制文本朗读_原创:昭明文选配乐朗读 卷第五十一 论一 东方曼倩 非有先生论 王子渊 四子讲德论 并序...
  5. JAVA中for循环缩制表位_用vim中的空格替换制表符
  6. 上传相关js和jquery对象
  7. SWT/JFace常用组件----容器类
  8. Python将word转化为txt文本
  9. mysql5.6卸载干净_Mysql完全干净卸载教程
  10. android studio svn 忽略文件
  11. 每日英语听力 Mac
  12. Windows7 基本常见问题及解决方案之汇总
  13. 赚钱很难吗?死磕一个项目,10年,必定成神
  14. RSS从入门到精通 .
  15. stats | 广义线性模型(三)——二元Logistic模型和Probit模型
  16. Citrix XenDesktop 简介
  17. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年5月份最新版)
  18. 计算机系统——汇编语言基础
  19. 任天堂战略聚焦与取舍学习笔记
  20. Vue 项目的成功发布和部署

热门文章

  1. QQ for linux
  2. 汉字为什么能流传至今_为什么中国的文字流传至今?
  3. c语言自动阅卷系统概要设计,VC++自动阅卷系统设计与实现(源代码及全套资料).doc...
  4. redis设计与实现读书笔记(一)
  5. 微信小程序数据懒加载
  6. 大众点评运维架构图文详解
  7. 计算机通信系统分哪两类,通信系统的组成(数字通信系统由哪几部分组成)
  8. Git 与 GitHub 速成教程
  9. yum安装python3
  10. java我的世界光影推荐_最棒的7款我的世界光影水反效果包