资源类型
本节中的每个文件描述的使用,格式和语法对于某些类型的应用程序资源,你可以提供你的资源目录(res/)。
在这里简短的总结每个资源类型:
动画资源
定义预先确定动画。
补间动画保存在 res/anim/下,从R.anim类访问。
帧动画保存在 res/drawable/ 下,从R.drawable类访问。
颜色状态列表资源
定义一个颜色资源,在视图状态变化的基础上改变。
保存在res/color/ 下,从R.color类访问。
drawable资源
用位图或XML定义各种图形。
保存在 res/drawable/ 下,从R.drawable类访问。
布局资源
定义您的应用程序的用户界面布局。
保存在res/layout/下,从R.layout类访问。
菜单资源
定义您的应用程序菜单中的内容。
保存在res/menu/下,从R.menu类访问。
字符串资源
定义字符串,字符串数组和复数形式(包括字符串格式和样式)。
保存在res/values/下,从R.string, R.array,和 R.plurals类访问。
定义用户界面元素的外观和格式。
保存在res/values/下,从R.style类访问。
更多的资源类型
如布尔值、整数、尺寸、颜色和其他数组资源的定义。
保存在res/values/下,但是每个从独特的R子类访问(如R.bool、R.integer、R.dimen等)。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
动画资源
动画资源可以定义两种类型的动画之一:
属性动画
创建一个动画通过修改一个对象的属性值在规定的时间内用一个Animator。
视图动画
有两种类型的动画,你可以用作视图动画框架:
补间动画:创建一个动画通过执行一系列的图像到动画的转换
帧动画:或创建一个动画,通过展示一个序列的图像用AnimationDrawable。
属性动画
动画在XML中定义,可以修改属性的目标对象,例如背景颜色或透明度,通过一定数量的时间值。
文件位置:
res/animator/filename.xml
这个文件名将被用作资源ID。
编译资源数据类型:
资源指向ValueAnimator,ObjectAnimator或 AnimatorSet
资源引用:
Java源文件中: R.animator.filename
XML文件中: @[package:]animator/filename
语法:
<set android:ordering=["together" | "sequentially"]>
<objectAnimator
android:propertyName="string"
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" |
"reverse"]
android:valueType=["intType" |
"floatType"]/>
<animator
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" |
"reverse"]
android:valueType=["intType" |
"floatType"]/>
<set>
...
</set>
</set>
文件必须有一个根元素:<set>,<objectAnimator>或 <valueAnimator>。你可以将动画元素一起组织起来, 一个<set> 元素包含另一个<set> 元素。
元素:
<set>
一个容器可以包含其他的动画元素(<objectAnimator>, <valueAnimator>或其他<set>元素),代表一个AnimatorSet。
你可以指定嵌套的<set>标签来进一步组织动画在一起。每个<set>可以定义其ordering属性。
属性:
android:ordering
关键字:指定在此设置的动画播放顺序。
值 |
描述 |
sequentially |
在这组依次播放动画 |
together (default) |
在这个集合同一时间播放动画 |
<objectAnimator>
使得一个特定属性对象在一个特定时间内。代表一个ObjectAnimator。
属性:
android:propertyName
String型,要求,对象的属性动画,通过其名称引用。例如你可以给一个视图对象指定“alpha”或“backgroundColor”属性。objectAnimator的元素不暴露目标属性,所以你不能在XML声明中设置对象动画。你必须解析你的动画的XML资源通过调用loadAnimator()和callsetTarget()来设置目标对象,目标对象包含这个属性。
android:valueTo
float型,int型或color型。要求,在动画属性值结束。颜色表示为六位十六进制数字(例如,# 333333)。
android:valueFrom
float型,int型或color型。在动画属性的值开始。如果未指定,动画开始值通过属性的获取方法获得。颜色表示为六位十六进制数字(例如,# 333333)。
android:duration
int型,动画时间是以毫秒为单位的,默认为300毫秒。
android:startOffset
int型,动画在start()被调用之后延迟这个数的毫秒开始。
android:repeatCount
int型,重复多少次动画。设置为“-1”为无限次重复或设置为一个正整数。例如,值“1”意味着在动画初始化运行一次后重复一次,因此动画总共运行了两遍。默认值为“0”,表示不重复。
android:repeatMode
int型,当动画到末尾时如何运转。android:repeatCountmust这个属性被设置为一个正整数或“-1”来产生效果。设置为“reverse”会使动画逐个迭代通过相反方向或设置为“repeat”会使动画每次从开始时刻循环。
android:valueType
关键字,如果值为颜色不会指定这个属性,动画框架会自动处理颜色值。
值 |
描述 |
intType |
指定动画值是整数 |
floatType (默认) |
指定动画值是浮点数 |
<animator>
在指定的时间执行动画,代表一个ValueAnimator。
属性:
android:valueTo
float型,int型或color型。要求,在动画结束的值。颜色表示为六位十六进制数字(例如,# 333333)。
android:valueFrom
float型,int型或color型。在动画开始的值。颜色表示为六位十六进制数字(例如,# 333333)。
android:duration
int型,动画时间是以毫秒为单位的,默认为300毫秒。
android:startOffset
int型,动画在start()被调用之后延迟这个数的毫秒开始。
android:repeatCount
int型,重复多少次动画。设置为“-1”为无限次重复或设置为一个正整数。例如,值“1”意味着在动画初始化运行一次后重复一次,因此动画总共运行了两遍。默认值为“0”,表示不重复。
android:repeatMode
int型,当动画到末尾时如何运转。android:repeatCountmust这个属性被设置为一个正整数或“-1”来产生效果。设置为“reverse”会使动画逐个迭代通过相反方向或设置为“repeat”会使动画每次从开始时刻循环。
android:valueType
关键字,如果值为颜色不会指定这个属性,动画框架会自动处理颜色值。
值 |
描述 |
intType |
指定动画值是整数 |
floatType (默认) |
指定动画值是浮点数 |
例子:
XML文件保存在 res/animator/property_animator.xml:
<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>
按照顺序播放这个动画,你必须在代码中通过解析这个XML资源获取AnimatorSet对象,在动画集合开始前你必须为你的所有动画设置目标对象。CallingsetTarget()为了所有AnimatorSet子对象方便设置为单一目标对象。下面的代码示范了如何使用:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
参见:
属性动画
API的例子演示如何使用属性动画系统。
视图动画
视图动画框架既支持补间动画又支持逐帧动画,它们都可以用XML声明。以下部分描述如何使用这两种方法。
补间动画
动画定义在XML中,执行变换如图形旋转、渐变、移动和伸缩。
文件位置:
res/anim/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源指向Animation
资源引用:
在Java源文件中: R.anim.filename
在XML文件中: @[package:]anim/filename
语法:
<?xml version="1.0"
encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"]
>
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>
这个文件必须包含一个根元素:可以是<alpha>、 <scale>、<translate>、<rotate>或 <set>元素包含一组(或多组)其他动画元素(甚至是嵌套的<set>元素)。
元素:
<set>
一个容器包含其他动画元素(<alpha>、<scale>、<translate>、<rotate>)或其他<set>元素,代表AnimationSet。
属性:
android:interpolator
插值器资源,插值器应用在动画上,这个值必须是资源的引用,指定一个插值器(不是一个插值器类名)。默认插值器资源可以从平台获取或你可以创建自己的插值器资源。看下面更多关于插值器的讨论。
android:shareInterpolator
Boolean型,“true”----如果你想在所有子元素中共享相同的插值器。
<alpha>
淡入或淡出动画。代表AlphaAnimation。
属性:
android:fromAlpha
Float型,开始不透明度补偿,0.0是透明的和1.0是不透明的。
android:toAlpha
Float型,结束不透明度补偿,0.0是透明的和1.0是不透明的。
关于<alpha>更多的属性支持,参看Animation类的引用(其中,所有XML属性继承了这个元素)。
<scale>
调整大小动画。你可以指定图像的中心位置,它向外增长(或向内)通过指定pivotX和pivotY。例如,如果这些值为0,0(左上角),所有的增长将向下拉到右边。代表ScaleAnimation。
属性:
android:fromXScale
Float型,开始X轴偏移,当值为1.0时表示没有变化。
android:toXScale
Float型,结束X轴偏移,当值为1.0时表示没有变化。
android:fromYScale
Float型,开始Y轴偏移,当值为1.0时表示没有变化。
android:toYScale
Float型,结束Y轴偏移,当值为1.0时表示没有变化。
android:pivotX
Float型,当对象是按比例缩放时X坐标保持不变。
android:pivotY
Float型,当对象是按比例缩放时Y坐标保持不变。
关于<scale>更多的属性支持,参看Animation类的引用(其中,所有XML属性继承了这个元素)。
<translate>
垂直或水平移动。以下属性支持任何三种格式中的一种:从-100%到100%的的值,表示相对于自身的百分比;从-100%p到100%p的值,表示相对于父对象的百分比;没有后缀的浮点值,表示绝对值。代表TranslateAnimation。
属性:
android:fromXDelta
Float型或百分比,开始X轴偏移。可以表达为:像素相对于正常位置(如“5”),相对于元素宽度百分比(例如“5%”),或相对于父对象宽度百分比(例如“5%p”)。
android:toXDelta
Float型或百分比,结束X轴偏移。可以表达为:像素相对于正常位置(如“5”),相对于元素宽度百分比(例如“5%”),或相对于父对象宽度百分比(例如“5%p”)。
android:fromYDelta
Float型或百分比,开始Y轴偏移。可以表达为:像素相对于正常位置(如“5”),相对于元素高度百分比(例如“5%”),或相对于父对象高度百分比(例如“5%p”)。
android:toYDelta
Float型或百分比,结束Y轴偏移。可以表达为:像素相对于正常位置(如“5”),相对于元素高度百分比(例如“5%”),或相对于父对象高度百分比(例如“5%p”)。
关于 <translate>更多的属性支持,参看Animation类的引用(其中,所有XML属性继承了这个元素)。
<rotate>
旋转动画。代表RotateAnimation。
属性:
android:fromDegrees
Float型,起始角位置,用度表示。
android:toDegrees
Float型,结束角位置,用度表示。
android:pivotX
Float型或百分比,X坐标的旋转中心。可以表达为:像素相对于对象的左边缘(如“5”),百分比相对于对象的左边缘(例如“5%”),百分比相对于父容器的左边缘(例如“5%p”)。
android:pivotY
Float型或百分比,Y坐标的旋转中心。可以表达为:像素相对于对象的上边缘(如“5”),百分比相对于对象的上边缘(例如“5%”),百分比相对于父容器的上边缘(例如“5%p”)。
关于 <rotate>更多的属性支持,参看Animation类的引用(其中,所有XML属性继承了这个元素)。
例子:
XML文件保存在res/anim/hyperspace_jump.xml下:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400"
/>
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400"
/>
</set>
</set>
这个应用程序代码片段将应用动画在ImageView 上和开始动画:
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
参见:
2D图形:补间动画
插值器
插值器是一个动画调节器定义在XML中影响动画的变化速度。这允许您现有的动画效果是加速、减速、重复、反弹等。
插值器通过android:interpolator属性应用到动画元素上,这个属性值是一个插值器资源的引用。
所有在Android中可用的插值器是插值器的子类,对于每一个插值器类,Android包括一个公共资源你可以引用以使用android:interpolator属性应用到动画插值器。下面的表指定了用于每个插入器的资源:
插值器类 |
资源 ID |
@android:anim/accelerate_decelerate_interpolator |
|
@android:anim/accelerate_interpolator |
|
@android:anim/anticipate_interpolator |
|
@android:anim/anticipate_overshoot_interpolator |
|
@android:anim/bounce_interpolator |
|
@android:anim/cycle_interpolator |
|
@android:anim/decelerate_interpolator |
|
@android:anim/linear_interpolator |
|
@android:anim/overshoot_interpolator |
下面是通过android:interpolator属性如何使用一个插值器:
<set
android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
自定义插值器
如果你不满意平台提供的插值器(上边表中列出的),你可以通过修改属性创建自定义插值器。例如,你可以调整AnticipateInterpolator的加速率,或调整CycleInterpolator的循环次数,为此,你需要在XML文件中创建你自己的插值器资源。
文件位置:
res/anim/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源指针对应插值器对象。
资源引用:
在XML文件中: @[package:]anim/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName
xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>
如果你不应用任何属性,你的插值器功能和平台所提供的(上表中列出的)完全相同。
元素:
注意每个插值器的实现,当定义在XML中,名称开头用小写字母。
<accelerateDecelerateInterpolator>
动画开始和结束时速度较慢,中间加速。
无属性。
<accelerateInterpolator>
动画变化的速度从开始后逐渐加速。
属性:
android:factor
Float型,加速率(默认值为1)。
<anticipateInterpolator>
动画变化开始的时候向后然后向前甩。
属性:
android:tension
Float型,张力大小(默认值为2)。
<anticipateOvershootInterpolator>
动画开始的时候向后,然后向前甩一定值,返回最后的值。
属性:
android:tension
Float型,张力大小(默认值为2)。
android:extraTension
Float型,张力系数(和张力大小相乘)(默认值为1.5)。
<bounceInterpolator>
动画结束时弹起。
无属性。
<cycleInterpolator>
动画循环播放特定的次数,速率沿着正弦曲线改变。
属性:
android:cycles
Integer型,循环次数(默认值为1)。
<decelerateInterpolator>
动画开始速度较高,逐渐减速。
属性:
android:factor
Float型,减速速率(默认值为1)。
<linearInterpolator>
动画变化的速率是恒定的。
无属性。
<overshootInterpolator>
向前甩一定值后再回到原来位置。
属性:
android:tension
Float型,张力大小(默认值为2)。
XML文件保存在res/anim/my_overshoot_interpolator.xml下:
<?xml version="1.0"
encoding="utf-8"?>
<overshootInterpolator
xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"
/>
这个动画XML将应用以下的插值器:
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700" />
帧动画
动画定义在XML文件中显示按顺序排列的图像(和电影一样)。
文件位置:
res/drawable/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源引用:
在Java源文件中: R.drawable.filename
在XML文件中: @[package:]drawable.filename
语法:
<?xml version="1.0"
encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />
</animation-list>
元素:
<animation-list>
要求,这个元素必须为根元素,至少包含一个<item>元素。
属性:
android:oneshot
Boolean型,“true”----只播放动画一次,“false”----循环播放动画。
<item>
一帧动画,必须是<animation-list> 的子元素。
属性:
android:drawable
Drawable资源,帧使用的drawable。
android:duration
Integer型,显示帧的时间,以毫秒为单位。
例子:
XML文件保存在res/anim/rocket.xml下:
<?xml version="1.0"
encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/rocket_thrust1"
android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2"
android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3"
android:duration="200" />
</animation-list>
这个应用代码将设置动画为View的背景,然后开始播放动画。
ImageView rocketImage = (ImageView)
findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
参见:
2D图形:帧动画
--------------------------------------------------------------------------------------------------------------------------------------------------------------
颜色状态列表资源
ColorStateList是一个你可以在XML文件中定义作为颜色使用的对象,但实际上是可以改变颜色的,这取决于视图对象的状态。例如,一个按钮控件可以存在几种不同的状态(按下、聚焦或没有按下和聚焦),使用颜色状态列表,你可以为不同的状态提供不同的颜色。
你可以在XML文件中描述状态列表,每个颜色定义在一个<item>元素里包含在一个<selector>元素下。每个<item>元素使用各种属性去描述状态,从而去决定使用那一个<item>。
在每个状态变化期间,从上到下遍历状态列表,如果第一项匹配当前状态就去使用第一项,这个选择不是基于“最优匹配”的,只要对应项首次满足最低标准的状态即可。
注意:如果你想提供静态颜色资源,可以使用简单Color值。
文件位置:
res/color/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源引用:
在Java源文件中:R.color.filename
在XML文件中:@[package:]color/filename
语法:
<?xml version="1.0"
encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:state_pressed=["true" |
"false"]
android:state_focused=["true" |
"false"]
android:state_selected=["true" |
"false"]
android:state_checkable=["true" |
"false"]
android:state_checked=["true" |
"false"]
android:state_enabled=["true" |
"false"]
android:state_window_focused=["true" |
"false"] />
</selector>
元素:
<selector>
要求,这个元素必须为根元素,至少包含一个<item>元素。
属性:
xmlns:android
String型,要求,定义XML命名空间,必须为“http://schemas.android.com/apk/res/android”。
<item>
定义一个颜色用在某些状态上,如属性所描述的。必须是<selector>元素的子元素。
属性:
android:color
Hexadeximal(十六进制)颜色,要求,这个颜色是指定一个RGB值和可选的alpha通道。
这个值起始为#号,后面紧跟Alpha-Red-Green-Blue信息,可以是下面的一种格式:
#RGB
#ARGB
#RRGGBB
#AARRGGBB
android:state_pressed
Boolean型,“true”----当这项被使用时应该是对象被按下(例如当一个按钮被触摸/点击时);“false”----这项被用作默认,非按下状态。
android:state_focused
Boolean型,“true”----当这项被使用时应该是对象被聚焦(例如当一个按钮使用轨迹球/方向键被高亮时);“false”----这项被用作默认,非聚焦状态。
android:state_selected
Boolean型,“true”----当这项被使用时应该是对象被选择(例如当一个选项卡被打开时);“false”----当这项被使用时应该是对象没有被选择。
android:state_checkable
Boolean型,“true”----当这项被使用时应该是对象被checkable;“false”----当这项被使用时应该是对象没有被checkable。(仅仅使用在如果对象可以在checkable和non-checkable控件之间过渡的情况)
android:state_checked
Boolean型,“true”----当这项被使用时应该是对象被选中;“false”----当这项被使用时应该是对象没有被选中。
android:state_enabled
Boolean型,“true”----当这项被使用时应该是对象被启用(能够接收触摸/单击事件);“false”----当这项被使用时应该是对象没有被启用。
android:state_window_focused
Boolean型,“true”----当这项被使用时应该是应用程序窗口被聚焦(应用程序在前台),“false”----当这项被使用时应该是应用程序窗口没有被聚焦(例如,通知栏被拉下或对话框出现)。
注意:记住,第一项状态列表匹配对象的当前状态将被应用。所以如果第一项在列表中不包含上面的状态属性,那么每一次将应用这个状态,这就是默认值为什么永远放在最后的原因(如下例子所示)。
例子:
XML文件保存在res/color/button_text.xml下:
<?xml version="1.0"
encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/>
<!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/>
<!-- focused -->
<item android:color="#ff000000"/> <!-- default
-->
</selector>
XML布局文件将应用颜色列表到视图上:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
参见: