Android 怎样绘制视图

当一个活动获取焦点,要绘制自己的布局。Android框架会操作绘图过程,但是活动必须提供布局层次的根节

点。
绘图开始于布局的根节点。它需要调整并绘制布局树。通过遍历树和描绘相交于无效区域的每个视图操作绘

图(????)。反过来,每个视图组是要求它的每个子节点被绘制(使用draw()方法),并且每个视图要求

绘制出自己。由于树是按照次序遍历的,意味着父节点在子节点前被绘制,而兄弟节点按照出现在树的次序被

绘制。
(注:框架将不会绘制不在无效的区域的视图,也将考虑制定背景。你可以强制绘制视图,通过调用

invalidate()方法)
绘制布局有两个过程:一个衡量阶段和一个布局阶段。衡量阶段是实现了measure(int,int)接口,并且从上

而下遍历视图树。每个视图递归设置尺寸规格到树。在衡量阶段的最后,每个视图都存有自己的尺寸。第二阶

段发生在layout(int,itn,int,int),也是从上而下。这个阶段,每个父节点将在衡量阶段已经计算了大小的子

节点安排好位置。
当一个View的measure()方法返回值,除了全部视图的派生,还有他的getMeasureWidth()和

getMeasureHeight()值必须设置。View标准的宽和高值必须符合View父节点附加的约束。在衡量阶段的最后要

保证所有父节点能接受他们的子节点的尺寸。父View可以多次调用measure()方法在子节点上。例如,如果子

View的不约束大小太大或太小(如果子节点不满意他们所得的空间,父节点就要在第二阶段阻止并指定规则)

,父View可以测量每个没有指定尺寸的子View,找出来他们需要多大空间,然后调用measure()方法重新给子

View确切的数值。
衡量阶段用到两个类表示尺寸。View可以用View.Measurespec类通知父类怎样测量放置。基类LayoutParams

只描述了View的宽和高多大。对于每个尺寸,能用下面的任意一个:1、一个精确的数值 2、FILL_PARENT,跟

父节点一般大 3、WRAP_CONTENT,它内容的大小。
(注:创始布局,调用requestLayout ()。View不再合适当前区域内时通常对自己调用这个方法。)
LayoutParams类的子类有些是不同于ViewGroup的子类。例如,RelativeLayout有自己的包含能够水平和垂直

方向居中的LayoutParam子类。
MeasureSpecs被用在放置要求到树从父节点到子节点。MeasureSpec能是下面三个模式之一:1、UNSPECIFIED,

用在父节点测定子View的期望尺寸。例如,LinearLayout能调用measure()在它高为UNSPECIFIED、宽为WXACTLY

240的子节点,查出子View希望给240像素的高度。 2、EXACTLY,用于父节点给子节点设置一个确切的数值。子

节点必须用这个值,还要保证它的子类在这个值内。 3、AT_MOST,用于父节点给子节点设置一个最大值。子节

点必须用这个值,还要保证它的子类在这个值内。

更多相关文章

  1. Android(安卓)绘制多个连续带数字圆圈。
  2. Android(安卓)Studio中布局文件(如activity_main.xml)设计视图&代
  3. Android简易手势密码开源库
  4. android 自定义图片合集(自定义控件)
  5. Android必会基础之Android是如何绘制视图的
  6. Property Animation - 概述和工作原理
  7. Android开发者选项之GPU过度绘制
  8. Skia深入分析9——延迟渲染和显示列表
  9. Android坐标系统常用方法属性总结

随机推荐

  1. Android(安卓)基础总结:(一)Android系统架构
  2. Android(安卓)4.4环境搭建——Android(安
  3. [原]如何在Android用FFmpeg+SDL2.0解码声
  4. android客户端与服务端交互的三种方式
  5. 不疯狂!非正常!
  6. [转]Android(安卓)SDK 中的 SDK Manager.
  7. 安卓表格布局android:collapseColumns,an
  8. Android应用程序启动过程源代码分析
  9. Android测试教程(2):测试基础
  10. Android: AIDL --- Android中的远程接口