Android 资源说明之动画资源

动画资源

动画资源可以定义两种类型的动画之一:
属性动画

通过使用Animator在设定的时间段内修改对象的属性值来创建动画。

View动画

您可以使用视图动画框架执行两种类型的动画:

  • 补间动画:通过使用动画对单个图像执行一系列转换来创建动画。
  • 帧动画:或通过使用AnimationDrawable按顺序显示一系列图像来创建动画。

属性动画

以XML定义的动画,用于在设定的时间内修改目标对象的属性,例如背景颜色或Alpha值。

文件位置

res/animator/filename.xml

文件名将用作资源ID。

已编译的资源数据类型

指向ValueAnimatorObjectAnimatorAnimatorSet的资源指针。

资源引用

在基于Java或Kotlin代码中: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>都可以定义自己的排序属性。

属性:

  • android:ordering
    关键词。指定此集中动画的播放顺序。
Value Description
sequentially 按顺序播放此集中的动画
together (default) 同时在此集中播放动画
<objectAnimator>

描述:在特定时间内动画对象的特定属性。表示ObjectAnimator

属性:

  • android:propertyName
    String型,必须的。动画属性名称,你可以为View设定alphabackgroundColor。您必须通过调用loadAnimator()并调用setTarget()来设置包含此属性的目标对象来加载您的动画XML资源。
  • android:valueTo
    float, int, 或 color。必须的。动画属性结束的值。颜色表示为六位十六进制数字(例如,#333333)。
  • android:valueFrom
    float, int, 或 color。动画属性开始的值。如果未指定,则动画从属性的get方法获取的值开始。颜色表示为六位十六进制数字(例如,#333333)。
  • android:duration
    int型。动画的时间(以毫秒为单位)。默认值为300毫秒。
  • android:startOffset
    int型。调用start()后动画延迟的毫秒数。
  • android:repeatCount
    int型。重复动画多少次。设置为“-1”以无限重复或为正整数。例如,值“1”表示动画在初始运行动画后重复一次,因此动画总共播放两次。默认值为“0”,表示不重复。
  • android:repeatMode
    int型。动画到达动画结尾时的行为方式。 android:repeatCount必须设置为正整数或“-1”才能使此属性生效。设置为“反向”以使动画在每次迭代时反向或“重复”以使动画循环从每次开始。
  • android:valueType
    关键词。如果值是颜色,请不要指定此属性。动画框架自动处理颜色值。
Value Description
intType 指定动画值是整数
floatType (default) 指定动画值为浮点数
<animator>

描述:在指定的时间内执行动画。表示ValueAnimator
属性:

  • android:valueTo 必须的。
  • android:valueFrom 必须的。
  • android:duration
  • android:startOffset
  • android:repeatCount
  • android:repeatMode
  • android:valueType

举例

保存在res / animator / property_animator.xml的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对象,然后在启动动画集之前为所有动画设置目标对象。为方便起见,调用setTarget()AnimatorSet的所有子项设置单个目标对象。以下代码显示了如何执行此操作:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();

View动画

视图动画框架支持补间和逐帧动画,它们都可以用XML声明。以下部分描述了如何使用这两种方法。

补间动画

以XML格式定义的动画,用于执行图形上的旋转,淡入淡出,移动和拉伸等过渡。

文件位置

res/anim/filename.xml

文件名将用作资源ID。

已编译的资源数据类型

指向Animation的资源指针。

资源引用

在基于Java或Kotlin代码中: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是不透明的。
<scale>

描述:调整大小的动画。您可以通过指定pivotXpivotY指定图像的中心点,使其向外(或向内)增长。例如,如果这些值为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坐标保持固定大小。
<translate>

描述:垂直和/或水平运动。支持以下三种格式中的以下任何属性:从-100到100以“%”结尾的值,表示相对于自身的百分比;以“%p”结尾的-100到100之间的值,表示相对于其父级的百分比;没有后缀的浮点值,表示绝对值。表示TranslateAnimation
属性:

  • android:fromXDelta
    Float型或百分比。开始X轴偏移。表示:相对于正常位置的像素(例如“5”),相对于元素宽度的百分比(例如“5%”),或相对于父宽度的百分比(例如“5%p”) 。
  • android:toXDelta
    Float型或百分比。结束X轴偏移。
  • android:fromYDelta
    Float型或百分比。开始Y轴偏移。
  • android:toYDelta
    Float型或百分比。结束Y轴偏移。
<rotate>

描述:旋转动画。表示RotateAnimation
属性:

  • android:fromDegrees
    Float型。起始角度位置,以度为单位。
  • android:toDegrees
    Float型。结束角度位置,以度为单位。
  • android:pivotX
    Float型。缩放对象时,X坐标保持固定大小。
  • android:pivotY
    Float型。缩放对象时,Y坐标保持固定大小。

举例

保存在res / anim / hyperspace_jump.xml的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);

插值器

插值器是以XML定义的动画修饰符,它影响动画中的变化率。这允许您现有的动画效果加速,减速,重复,反弹等。

内插器应用于具有android:interpolator属性的动画元素,其值是对内插器资源的引用。

Android中可用的所有插值器都是Interpolator类的子类。对于每个插值器类,Android包含一个公共资源,您可以参考该公共资源,以便使用android:interpolator属性将插值器应用于动画。下表指定了每个插补器使用的资源:

Interpolator class Resource 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"
    />

如果您不应用任何属性,那么插补器的功能将与平台提供的内容完全相同(在上表中列出)。

详解

请注意,每个Interpolator实现在以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
    int型。循环次数(默认为1)。
<decelerateInterpolator>

描述:变化率很快开始,然后减速。
属性:

  • android:factor
    Float型。减速率(默认为1)。
<linearInterpolator>

描述:变化率是不变的。
属性:没有属性。

<overshootInterpolator>

描述:变化向前掠过并超过最后一个值,然后回来。
属性:

  • android:tension
    Float型。要应用的张力(默认值为2)。
举例

保存在res / anim / my_overshoot_interpolator.xml的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或Kotlin代码中: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>

描述:这必须是根元素。包含一个或多个元素。
属性:

  • android:oneshot
    如果您想要执行一次动画,则为“true”;“false”循环播放动画。
<item>

描述:单帧动画。必须是<animation-list>元素的子元素。
属性:

  • android:drawable
    Drawable资源。用于此框架的drawable。
  • android:duration
    整数。显示此帧的持续时间,以毫秒为单位。

举例

保存在res / drawable / rocket.xml的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>

下面的代码将动画设置为视图的背景,然后播放动画:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}

完事

发布了103 篇原创文章 · 获赞 31 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/sinat_38184748/article/details/99620641
今日推荐