关于android资源类型简述

关于android资源类型简述

资源类型

本节中的每个文件描述的使用,格式和语法对于某些类型的应用程序资源,你可以提供你的资源目录(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() 和call setTarget() 来设置目标对象,目标对象包含这个属性。

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对象,在动画集合开始前你必须为你的所有动画设置目标对象。Calling setTarget() 为了所有 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

AccelerateDecelerateInterpolator

@android:anim/accelerate_decelerate_interpolator

AccelerateInterpolator

@android:anim/accelerate_interpolator

AnticipateInterpolator

@android:anim/anticipate_interpolator

AnticipateOvershootInterpolator

@android:anim/anticipate_overshoot_interpolator

BounceInterpolator

@android:anim/bounce_interpolator

CycleInterpolator

@android:anim/cycle_interpolator

DecelerateInterpolator

@android:anim/decelerate_interpolator

LinearInterpolator

@android:anim/linear_interpolator

OvershootInterpolator

@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。

编译资源数据类型:

资源指向 AnimationDrawable对象。

资源引用:

在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。

编译资源数据类型:

资源指向 ColorStateList对象。

资源引用:

在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" />

    参见:

Color (简单值)

ColorStateList

State List Drawable

你可能感兴趣的:(关于android资源类型简述)