当一个activity获得焦点时, 它会被要求绘制它的布局. Android框架将处理绘制的过程, 但是activity必须提供它的布局体系的根节点. 绘制将从根节点开始, 根节点被要求测量和绘制布局树. 绘制是通过遍历树并渲染每个处于有效区域内的view来完成的. 每个view group依次负责要求它的每个子元素绘制自身,而每个view负责绘制它自己. 由于树使用中序遍历(in-order traverse), 这意味着父元素首先被绘制, 然后是子元素按照它们出现的顺序来绘制. (译者注: 这里in-order疑为pre-order)

android框架不会绘制处于无效区域中的view, 并且会帮你绘制背景view.

你可以调用invalidate()方法来强制一个view重新绘制.

绘制布局是一个两次的过程: 一个测量过程和一个布局过程. 测量过程实现在measure(int,int)中, 是对View树的一个自顶向下的遍历. 每个View将尺寸要求向下一层传递. 在测量过程的最后, 每个view储存了它的测量值. 第二个过程在layour(int,int,int,int)中发生, 同样从上到下. 在这一个过程中每个父元素负责根据在测量过程中计算的大小, 将子元素放在合适的位置.

当一个View的measure()方法返回时, 它和它的后代元素的getMeasuredWidth()和getMeasuredHeight()值必须被设定. 一个view的测量宽度和测量高度必须遵循它的父View的限制. 这将保证在测量过程之后, 所有的父元素接受它们的子元素的测量值. 一个父View可能对它的子元素不止调用一次measure(). 例如, 父元素可能不带参数的测量每个子元素一次来得到它们希望的大小, 然后再次调用带参数的measure()如果子元素的大小超过限制. (即, 如果子元素相互无法协调, 父元素将为它们设置规则.)

使用requestLayout()来初始化一个布局. 该方法一般由一个View对自身调用, 当它认为它无法置于它当前的限制区域内时.

测量过程使用两个类来传递尺寸. View使用View.MeasureSpec来告诉它们的父元素它们希望如何被测量和放置. LayoutParams类描述了一个View希望它的长和宽各为多少. 它可以指定下列的一个:

  • 一个确定的数值
  • 表示View希望和它的父元素一样大(除去padding)
  • 表示View希望能足够包括它的内容(加上padding)

LayoutParams 的不同子类可用于不同的ViewGroup子类. 例如RelativeLayout 有它自己的LayoutParams子类, 该子类包括了让每个子View水平和竖直居中的功能.

MeasureSpecs 可用来将要求向下传递. 一个MeasureSpec 可以为三种模式中的一种:

  • UNSPECIFIED: 一个父元素用它来决定子View的期望大小. 例如, 一个 LinearLayout 可能需要对它的子元素调用measure(), 将高度设为UNSPECIFIED ,宽度设为 EXACTLY 240来得到子View在宽度为240像素时,它的期望高度是多少.
  • EXACTLY: 一个父元素用它来为子元素强加一个精确的大小. 子元素必须使用这个大小, 并保证它的所有后代元素遵守这个限制.
  • AT_MOST: 父元素用它来为子元素强加一个最大尺寸. 子元素必须保证它和它所有的后代在这个大小之内

原文链接:http://blog.csdn.net/liao3841054/article/details/6980546

转载于:https://www.cnblogs.com/xgjblog/p/4837645.html

Android是如何绘制View的相关推荐

  1. android 控件总结,Android制霸控件View总结

    关于Android View控件 Android中控件大致被分为两类ViewGroup,View.ViewGroup作为容器管理View.Android视图,是类似于Dom树的架构.父视图负责测量定位 ...

  2. android绘制view的过程

    1 android绘制view的过程简单描述  简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw):             下面看看每一步的动作到底 ...

  3. Android 虚线实现绘制 - DashPathEffect

    前言: 通过view绘制虚实线,采用Android自带API--DashPathEffect.具体使用请参考更多的链接,这里只是讲解. 构造函数 DashPathEffect 的构造函数有两个参数: ...

  4. Android开发之自定义view进行旋转动画

    老套路先上图: 整个view非常简单,我自定义view里面都有详细的注释说明 先看自定义view部分代码: package cn.xiayiye5.customizestudy.view;import ...

  5. android圆形头像 demo,Android图像处理之绘制圆形头像

    在Android中,绘制圆形和绘制图片都是很容易的事情,但是绘制圆形图片就有点难倒人了.以前为了偷懒就直接去github上找一个开源项目,后来才发现绘制圆形图片其实也是很简单的事.绘制圆形图片也需要两 ...

  6. android动画view上移,在Android开发中使用View制作一个引导动画

    在Android开发中使用View制作一个引导动画 发布时间:2020-11-20 16:46:16 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关在Android开发中使用V ...

  7. android小球移动代码,Android中如何绘制一个跟随手指移动的小球

    Android中如何绘制一个跟随手指移动的小球 发布时间:2020-11-07 16:22:43 来源:亿速云 阅读:82 作者:Leah 本篇文章为大家展示了Android中如何绘制一个跟随手指移动 ...

  8. 【转】高手速成android开源项目【View篇】

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...

  9. 高手速成android开源项目【View篇】(转)

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...

  10. 转:高手速成android开源项目【View篇】 .

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...

最新文章

  1. RHEL/CentOS通用性能优化、安全配置参考
  2. C++拾趣——类构造函数的隐式转换
  3. 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】
  4. R400换XP 所有驱动程序安装一览表
  5. 题解:一些递推的题。
  6. Android在代码中设置drawableLeft(Right/Top/Bottom)
  7. 计算机中央处理器cpu_中央处理器(CPU)| 计算机科学组织
  8. mysql partition 性能_通过分区(Partition)提升MySQL性能
  9. STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)
  10. 40张图全面解析TCP 三次握手和四次挥手
  11. 智能汽车产业148页深度研究报告:汽车智能开启,拥抱产业变革.pdf(附下载链接)...
  12. 使用json对象要注意的地方
  13. 错误与异常_2-7选择题
  14. 王亚叶:洞悉客户心声用大数据运营
  15. 武汉科技大学计算机学院培养方案,武汉科技大学培养方案.DOC
  16. 雷达基础系列文章之四:雷达专业国内期刊
  17. 万用表如何进行欧姆校零
  18. HDU - 6438 Buy and Resell (贪心 + 优先队列)
  19. Gnirehtet使用教程 —— 将电脑网络通过USB共享给Android 设备
  20. 职场中职员如何向上管理?

热门文章

  1. linux上scrapy项目的创建,Python网络爬虫4 ---- Linux下编写最简单的scrapy网络爬虫项目...
  2. 流水线效率计算公式_线束加工的生产效率、爬坡计划与产能提升浅读
  3. 拉丁正方形 java_LeetCode 221. Maximal Square 最大正方形(C++/Java)
  4. 谈谈全自动安装常使用的pip install的原理及作用!!!
  5. 容器技术Docker K8s 51 容器镜像服务(ACR)详解-进阶
  6. 阿里云云计算 52在线实验--云监控初体验
  7. 算法:91. 解码方法
  8. 参考文献顺序_科技论文参考文献的著录规则及存在问题
  9. 用html设计倒计时秒表,Javascript实现秒表倒计时功能
  10. 输入n个整数,输出其中最小的k个