当一个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

Android是如何绘制View的的更多相关文章

  1. android绘制view的过程

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

  2. 【转】Android绘制View的过程研究——计算View的大小

    Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/18182725720121023218 ...

  3. 从Android源码分析View绘制

    在开发过程中,我们常常会来自定义View.它是用户交互组件的基本组成部分,负责展示图像和处理事件,通常被当做自定义组件的基类继承.那么今天就通过源码来仔细分析一下View是如何被创建以及在绘制过程中发 ...

  4. [翻译] Android是怎样绘制视图的

    原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...

  5. Android自定义View4——统计图View

    1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...

  6. Android之开源项目view篇

    本文转自:http://www.trinea.cn/android/android-open-source-projects-view/ 主要介绍Android上那些不错个性化的View,包括List ...

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

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

  8. Android 的窗口管理系统 (View, Canvas, WindowManager)

    http://blog.csdn.net/ritterliu/article/details/39295271 From漫天尘沙 在图解Android - Zygote 和 System Server ...

  9. Android: 利用SurfaceView绘制股票滑动直线解决延迟问题

    1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...

随机推荐

  1. 【转】JAVA变量path , classpth ,java_home设设置作用和作用

    转载地址:http://bbs.tech.163.com/bbs/tech_0ik1/147645925.html 在把jdk安装到计算机中之后,我们来进行设置使java环境能够使用. 首先右键点我的 ...

  2. Friendship

    Friendship Time Limit: 2000MS Memory Limit: 20000K Total Submissions: 9824 Accepted: 2720 Descriptio ...

  3. 花40分钟写一个-CBIR引擎-代码公开

          浏览网页的时候发现一篇不错的文章"用Python和OpenCV创建一个图片搜索引擎的完整指南"http://python.jobbole.com/80860/.作者在浏 ...

  4. Android属性动画完全解析(中)

    转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是 ...

  5. php获取本周和上周的开始日期和结束日期

    <?php header('Content-type: text/html; charset=utf-8'); $date=date('Y-m-d'); //当前日期 $first=1; //$ ...

  6. VirtualBox下Ubuntu利用桥接方式上网

    1.打开virtualbox,选择[设置]-[网络]将连接方式改为[Bridged Adapter] 2.在Ubuntu中, 运行sudo gedit /etc/network/interfaces ...

  7. SqlSever基础 len函数 返回一个字符串的长度

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  8. join(添加字符)与id显示

    #!/usr/bin/env python li = ["alex",'sb'] l1 = "_".join(li) print(l1) print(id(li ...

  9. 【leetcode❤python】Move Zeroes

    #-*- coding: UTF-8 -*- #filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,#把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤.最终一 ...

  10. SQL生成随机数

    ALTER FUNCTION [dbo].[ufn_Random] ( @A INT, @B INT ) RETURNS INT AS BEGIN /* 功能:生成随机数 */ ,) , SELECT ...