android视图绘制流程,android视图绘制流程完全解析带你一步步深入了解view二.docx...
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...相关推荐
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
在上一篇文章中,我带着大家一起剖析了一下LayoutInflater的工作原理,可以算是对View进行深入了解的第一步吧.那么本篇文章中,我们将继续对View进行深入探究,看一看它的绘制流程到底是什么 ...
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程,了解了视图绘制流程中onMeasure.onLayout.onDraw这三个最重要步骤的工作原理,那么今天我们将继续对View进行深 ...
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 有段时间没写博客了,感觉都有些生疏了呢.最近繁忙的工作终于告一段落, ...
- Android自定义View的实现方法,带你一步步深入了解View(四)
不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,算是把View中很多重要的知识 ...
- Android自定义View的实现方法,带你一步步深入了解View
如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件.组合控件.以及继承控件.那么下面我们就来依次学习一下,每种方式分别是如何自定义View的. 一.自绘控件 自绘控件的意思就 ...
- Android 自定义view完全解析--带你通透了解自定义view
参考转自郭霖博客带你一步步深入了解View系列 Android LayoutInflater原理分析 相信接触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用 ...
- Android LayoutInflater原理分析,带你一步步深入了解View
Android视图绘制流程完全解析,带你一步步深入了解View(一) 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 ...
- Android LayoutInflater原理分析,带你一步步深入了解View(一) 郭霖学习摘要
2019独角兽企业重金招聘Python工程师标准>>> public class MainActivity extends Activity {//----------------- ...
- Android视图绘制流程完全解析,带你一步步深入了解
Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了解View(二) Android视图状态及重绘流程分析,带你 ...
- android自定义view流程,Android 自定义View--从源码理解View的绘制流程
前言 在Android的世界里,View扮演着很重要的角色,它是Android世界在视觉上的具体呈现.Android系统本身也提供了很多种原生控件供我们使用,然而在日常的开发中我们很多时候需要去实现一 ...
最新文章
- 【 C 】字符串函数专题
- Codeforces 1108 E2(线段树+思维)
- Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头
- 复制文本朗读_原创:昭明文选配乐朗读 卷第五十一 论一 东方曼倩 非有先生论 王子渊 四子讲德论 并序...
- JAVA中for循环缩制表位_用vim中的空格替换制表符
- 上传相关js和jquery对象
- SWT/JFace常用组件----容器类
- Python将word转化为txt文本
- mysql5.6卸载干净_Mysql完全干净卸载教程
- android studio svn 忽略文件
- 每日英语听力 Mac
- Windows7 基本常见问题及解决方案之汇总
- 赚钱很难吗?死磕一个项目,10年,必定成神
- RSS从入门到精通 .
- stats | 广义线性模型(三)——二元Logistic模型和Probit模型
- Citrix XenDesktop 简介
- 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年5月份最新版)
- 计算机系统——汇编语言基础
- 任天堂战略聚焦与取舍学习笔记
- Vue 项目的成功发布和部署
热门文章
- QQ for linux
- 汉字为什么能流传至今_为什么中国的文字流传至今?
- c语言自动阅卷系统概要设计,VC++自动阅卷系统设计与实现(源代码及全套资料).doc...
- redis设计与实现读书笔记(一)
- 微信小程序数据懒加载
- 大众点评运维架构图文详解
- 计算机通信系统分哪两类,通信系统的组成(数字通信系统由哪几部分组成)
- Git 与 GitHub 速成教程
- yum安装python3
- java我的世界光影推荐_最棒的7款我的世界光影水反效果包