- 浏览: 580250 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (338)
- 已过时文章(留念用) (39)
- Android学习笔记 (30)
- Android开发指引自译 (100)
- Android NDK文档自译 (23)
- Android设计指引自译 (2)
- xp(ペケピー)&linux(理奈、铃)酱~ (4)
- ui酱&歌词自译~ (9)
- lua酱~ (9)
- 自我反省 (1)
- 羽game计划 (1)
- XSL酱 (2)
- java酱 (3)
- 设计的领悟 (58)
- 涂鸦作品(pixiv) (1)
- ruby酱 (2)
- Objective-C编程语言自译 (2)
- Android开发月报 (6)
- objc酱 (2)
- photoshop (3)
- js酱 (6)
- cpp酱 (8)
- antlr酱 (7)
- Lua 5.1参考手册自译 (11)
- 收藏品 (3)
- 待宵草计划 (4)
- 体验版截图 (1)
最新评论
-
naruto60:
太给力了!!!!我这网打不开Intel官网,多亏楼主贴了连接, ...
使用HAXM加速的Android x86模拟器(和一些问题) -
yangyile2011:
谢谢博主,翻译得很好哦
【翻译】(4)片段 -
ggwang:
牙痛的彼岸:痹!
牙痛的彼岸 -
ggwang:
总结得很简练清晰啊,学习了!
ANTLR学习笔记一:概念理解 -
leisurelife1990:
mk sdd
用git下载Android自带app的源代码
【翻译】(26)Android如何绘画视图
see
http://developer.android.com/guide/topics/ui/how-android-draws.html
原文见
http://developer.android.com/guide/topics/ui/how-android-draws.html
-------------------------------
How Android Draws Views
Android如何绘画视图
-------------------------------
When an Activity receives focus, it will be requested to draw its layout. The Android framework will handle the procedure for drawing, but the Activity must provide the root node of its layout hierarchy.
当一个活动接收焦点,它将被请求绘画它的布局。Android框架将处理绘画的过程,但Activity必须提供它的布局层级的根节点。
Drawing begins with the root node of the layout. It is requested to measure and draw the layout tree. Drawing is handled by walking the tree and rendering each View that intersects the invalid region. In turn, each View group is responsible for requesting each of its children to be drawn (with the draw() method) and each View is responsible for drawing itself. Because the tree is traversed in-order, this means that parents will be drawn before (i.e., behind) their children, with siblings drawn in the order they appear in the tree.
绘画从布局的根节点开始。它被请求度量和绘画布局树。绘画通过遍历树来处理并且渲染每个与不可用区域相交的视图。反过来,每个View组有责任请求它的每个子对象被绘画(用draw()方法)并且每个View有责任绘画它自己。因为树是按次序遍历,这意味着父节点将在它们的子对象之前(即叠在后面)被绘画,而同级对象根据它们在树中出现的次序绘画。
-------------------------------
The framework will not draw Views that are not in the invalid region, and also will take care of drawing the Views background for you.
框架将不绘画不再不可用区域内的View,同时还将小心地为你绘画View的背景。
You can force a View to draw, by calling invalidate().
你可以强制一个View绘画,通过调用invalidate()。
-------------------------------
Drawing the layout is a two pass process: a measure pass and a layout pass. The measuring pass is implemented in measure(int, int) and is a top-down traversal of the View tree. Each View pushes dimension specifications down the tree during the recursion. At the end of the measure pass, every View has stored its measurements. The second pass happens in layout(int, int, int, int) and is also top-down. During this pass each parent is responsible for positioning all of its children using the sizes computed in the measure pass.
绘画布局是两个传递过程:一个度量传递和一个布局传递。度量传递由measure(int, int)实现并且是View树的自上而下遍历。每个View把尺寸规范在递归期间沿着树向下推。在度量传递的最后,每个View已经存储它的度量。第二个传递发生在layout(int, int, int, int)中,也是自上而下。在这个传递期间父对象有责任定位它的所有子对象,使用在度量传递中计算的大小。
When a View's measure() method returns, its getMeasuredWidth() and getMeasuredHeight() values must be set, along with those for all of that View's descendants. A View's measured width and measured height values must respect the constraints imposed by the View's parents. This guarantees that at the end of the measure pass, all parents accept all of their children's measurements. A parent View may call measure() more than once on its children. For example, the parent may measure each child once with unspecified dimensions to find out how big they want to be, then call measure() on them again with actual numbers if the sum of all the children's unconstrained sizes is too big or too small (i.e., if the children don't agree among themselves as to how much space they each get, the parent will intervene and set the rules on the second pass).
当一个View的measure()返回时,它的getMeasuredWidth()和getMeasuredHeight()的值必须被设置,伴随着对于那个View的后代的所有那些值。一个View的度量宽度和度量高度值必须考虑View的父对象所强加的约束。它保证在度量传递的最后,所有父对象接受它们的所有子对象的度量。一个父视图可以在它的子对象上调用measure()多于一次。例如,父对象可能用未指定的尺寸度量每个子对象一次以计算出他们希望有多大,然后再次用实际成员调用measure(),如果所有子对象的不受约束大小的总和太大或者太小(即,如果子对象不同意它们自己关于它们每一个得到多大的空间,父对象将在第二次传递中介入并设置规则)
-------------------------------
To initiate a layout, call requestLayout(). This method is typically called by a View on itself when it believes that is can no longer fit within its current bounds.
为了初始化一个布局,请调用requestLayout()。这个方法通常被一个View调用在它自己身上,在其相信不再可以适应它的当前范围的时候。
-------------------------------
The measure pass uses two classes to communicate dimensions. The View.MeasureSpec class is used by Views to tell their parents how they want to be measured and positioned. The base LayoutParams class just describes how big the View wants to be for both width and height. For each dimension, it can specify one of:
度量传递使用两个类以传递尺寸。View.MeasureSpec类被View使用以告诉他们的父对象他们希望如何被度量和定位。LayoutParams基类只是描述该View对于宽和高希望有多大。对于每个尺寸,它可以指定以下其中一种值:
* an exact number
* 一个精确数
* FILL_PARENT, which means the View wants to be as big as its parent (minus padding)
* FILL_PARENT,它意味着View希望和它的父对象同样地大(减去内边距)
* WRAP_CONTENT, which means that the View wants to be just big enough to enclose its content (plus padding).
* WRAP_CONTENT,它意味着View希望的正好足够地大来装载它的内容(减去内边距)。
There are subclasses of LayoutParams for different subclasses of ViewGroup. For example, RelativeLayout has its own subclass of LayoutParams, which includes the ability to center child Views horizontally and vertically.
有几个LayoutParams的子类用于不同的ViewGroup子类。例如,RelativeLayout拥有它自己的LayoutParams子类,它包含水平地或垂直地居中子View的能力。
MeasureSpecs are used to push requirements down the tree from parent to child. A MeasureSpec can be in one of three modes:
MeasureSpecs被用于从父到子向下推要求。MeasureSpec可以是三种模式的其中一种:
* UNSPECIFIED: This is used by a parent to determine the desired dimension of a child View. For example, a LinearLayout may call measure() on its child with the height set to UNSPECIFIED and a width of EXACTLY 240 to find out how tall the child View wants to be given a width of 240 pixels.
* UNSPECIFIED:这是父对象使用以决定子View的期待尺寸。例如,一个LinearLayout可以在它的子对象上调用measure(),高度设置为UNSPECIFIED,而宽度设置为准确的240以计算出在给定宽度为240像素时子View想要有多高。
* EXACTLY: This is used by the parent to impose an exact size on the child. The child must use this size, and guarantee that all of its descendants will fit within this size.
* EXACTLY:这是父对象使用以强制在子对象上的一个精确大小。子对象必须使用这个大小,并且保证它的所有后代将适合这个大小。
* AT_MOST: This is used by the parent to impose a maximum size on the child. The child must guarantee that it and all of its descendants will fit within this size.
* AT_MOST:这是父对象使用以强制在子对象上的一个最大大小。子对象必须保证它和它的所有后代将适合这个大小。
Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.
除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。
Android 4.0 r1 - 16 Dec 2011 21:54
-------------------------------
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
(此页部分内容基于Android开源项目,以及使用根据创作公共2.5来源许可证描述的条款进行修改)
发表评论
-
【翻译】(9-补丁2)电话簿提供者
2012-07-18 12:54 2400【翻译】(9-补丁2)电话簿提供者 see h ... -
【翻译】(8-补丁1)Android接口定义语言(AIDL)
2012-07-02 05:55 2927【翻译】(8-补丁1)Andro ... -
【翻译】(0)应用组件
2012-06-30 23:50 829【翻译】(0)应用组件 see http:// ... -
【翻译】(88)传感器
2012-05-21 21:25 1077【翻译】(88)传感器 ... -
【翻译】(87)复制与粘贴
2012-05-20 14:48 1929【翻译】(87)复制与粘贴 see http: ... -
【翻译】(86)音频捕捉
2012-05-16 15:14 1104【翻译】(86)音频捕捉 ... -
【翻译】(85)照相机
2012-05-13 15:09 3796【翻译】(85)照相机 see http:// ... -
【翻译】(84)JetPlayer
2012-04-21 16:24 981【翻译】(84)JetPlayer see h ... -
【翻译】(83)媒体回放
2012-04-21 16:00 1860【翻译】(83)媒体回放 see http:/ ... -
【翻译】(82)多媒体与照相机
2012-04-18 23:05 953【翻译】(82)多媒体与照相机 see htt ... -
【翻译】(23-补丁3)构建无障碍服务
2012-04-18 21:57 1627【翻译】(23-补丁3)构 ... -
【翻译】(23-补丁2)使应用程序无障碍
2012-04-16 13:08 2099【翻译】(23-补丁2)使应用程序无障碍 see ... -
【翻译】(23-补丁1)无障碍
2012-04-11 22:38 911【翻译】(23-补丁1)无 ... -
【翻译】(81)Renderscript之运行时API参考手册
2012-04-11 22:13 1416【翻译】(81)Renderscript之运行时API参 ... -
【翻译】(80)Renderscript之计算
2012-04-09 14:09 1444【翻译】(80)Renderscript之计算 ... -
【翻译】(79)Renderscript之图形
2012-04-08 13:59 2866【翻译】(79)Renderscript之图形 ... -
【翻译】(78)Renderscript
2012-04-04 15:35 1442【翻译】(78)Renderscript see ... -
【翻译】(77)可绘画对象动画
2012-03-18 10:52 711【翻译】(77)可绘画对象动画 see htt ... -
【翻译】(76)视图动画
2012-03-18 10:04 806【翻译】(76)视图动画 see http:/ ... -
【翻译】(75)属性动画
2012-03-17 18:24 2508【翻译】(75)属性动画 see http:/ ...
相关推荐
在Android开发中,视图(View)是构建用户界面的基础元素,它们负责处理用户的交互和显示数据。本教程集合了Android端的一些基本视图操作实例,涵盖了ListView、Spinner以及ImageSwitch这三个常用组件,旨在帮助初学...
在Android开发中,视图切换是一项基础且重要的任务,它涉及到用户界面的动态更新和交互体验的提升。本文将深入探讨如何在Android环境下实现视图切换,并以模仿Launcher的工作空间(Workspace)为例进行讲解。 首先...
在Android开发中,创建一个能够实现月视图与周视图切换的日历控件是一项常见的需求,这样的控件可以提供用户友好的界面,方便他们在不同的时间尺度上查看和管理事件。"android-collapse-calendar-view-develop"这个...
### Android视图组和布局详解 #### 一、Android的屏幕元素体系 在Android开发中,屏幕元素体系的构建基于视图(View)与视图组(ViewGroup)。视图组是一个特殊的视图,它的主要功能是容纳并管理一系列的子视图。...
在Android开发中,创建一个类似小米日历的周月视图切换功能是一项常见的需求,它涉及到用户界面(UI)设计、时间与日期处理以及自定义控件的开发。本项目"Android 仿小米日历周月视图切换"旨在实现这样一个功能,...
在Android开发中,ListView是展示大量数据的一种常见视图组件,尤其适用于菜单、选项列表等场景。本资源提供了一个完整的Android应用示例,专门讲解如何实现ListView及其交互功能。 首先,ListView的基础在于...
android界面视图的类图.
在Android开发中,动态视图渲染是一项重要的技术,它允许开发者根据不同的数据结构来创建和更新用户界面。这种技术在构建复杂、可扩展且灵活的应用程序时尤其有用,因为它能够减少硬编码视图布局,提高代码的可读性...
【Android卡片视图效果源码】是一个专门为Android平台设计的库,它提供了丰富的视图样式,包括普通、圆角和扇贝角的TicketView。这个库的目的是为开发者提供更美观且可定制化的用户界面元素,使应用在视觉上更具吸引...
在Android开发中,有时我们希望为应用程序中的视图设置独特的字体风格,以增强用户体验和界面设计的个性化。标题提到的“Android-一个辅助库用于为你的android视图设置自定义字体”就是一个这样的解决方案,它旨在...
在Android开发中,自定义视图是实现独特用户体验和界面设计的关键技术。"安卓视图效果相关-Android自定义图片视图.rar"这个压缩包很可能包含了一系列用于展示自定义图片视图的源代码示例。自定义视图允许开发者超越...
在Android开发中,滚动视图(Scrolling View)是一种常见的用户界面组件,它允许用户查看超过屏幕大小的内容。本资源“android 滚动视图效果源码.zip”提供了自定义滚动视图控件,其设计灵感来源于淘宝头条,旨在为...
Android适配器视图-
《Android高级应用源码解析——基于Android课表视图》 在移动开发领域,Android操作系统以其开源、可定制性及丰富的API,深受开发者喜爱。在众多应用中,课表视图是教育类应用中常见的功能模块,它为用户提供了一种...
用于在android中旋转视图的库
在Android应用开发中,创建一个能让用户自由绘图的视图是实现互动性和创新功能的重要方式。本项目标题“Android-能让用户创建绘图的Android视图”正是聚焦于这样一个功能,它允许用户通过触屏操作在屏幕上绘制图形,...
Android Week View是一个Android库,用于在应用程序中显示日历(周视图或日视图)。 它支持自定义样式。 产品特点 周视图日历 日视图日历 自定义样式 水平和垂直滚动 无限水平滚动 在xml预览窗口中实时预览自定义...
在Android布局中,ScrollView只能包含一个直接的子视图,这是为了确保滚动的效率和可预测性。如果需要添加多个视图,通常会使用一个LinearLayout、RelativeLayout或者其他布局作为ScrollView的直接子元素,然后在这...
【Android 带动画的底部弹出视图】 在Android应用开发中,用户交互界面的设计是至关重要的。底部弹出视图(Bottom Sheet)是一种常见的交互元素,它可以从底部向上滑动显示更多的内容或者功能选项,常用于展示详情...