• 原文翻译 Android_Develop_API Guides_Animation Resources(动画资源)


    英文原文:http://developer.android.com/guide/topics/resources/animation-resource.html#Property


    一个动画资源可以使用如下两种动画类型的一种来定义:
    Property Animation
        通过 Animator 获得到的一系列的时间集来改变一个对象的属性值创建的动画。
    View Animation
        通过视图动画框架,这里有两种类型的动画你可以定义。
        ·Tween animation(补间动画) : 通过Animation在一张图片上执行一系列的变化来创建动画。
        ·Frame animation (帧动画):通过AnimationDrawable 展示一系列有顺序的图片来创建动画。

    补间动画(Property Animation)
    通过修改目标对象的属性值,使用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>可以包含<set>元素)。

    元素:
        <set>
            一个包含其他动画元素(<objectAnimator>,<valueAnimator>或其他的<set>元 素)的容器,代表一个 AnimatorSet。        你可以进一步的组织动画通过指定的嵌套<set>。每一个<set>元素可以定义它自己的 ordering 属性。
            
            属性:

            android:ordering
                关键字,指定位于该set下的动画的播放顺序。
                值            描述
                sequentially        顺序的播放该set下定义的动画
                together(默认)    同时播放该set下定义的动画
        <objectAnimator>
            在一个指定的时间内动态变化对象指定的属性,代表一个 ObjectAnimator 。
            属性:

            android:propertyName
                字符,必须的。代表要被动画化的对象属性,指向对象属性的名字。例如,你可以为一个视图对象指定为"alpha" 或"backgroundColor"。<objectAnimator>元素没有暴露给我们一个 target 属性,因此,你不能在XML描述中设置要执行动画的对象。你必须通过调用 loadAnimator() 来加载你的动画XML资源,然后调用 setTarget() 来设置包含这个属性的目标对象。

            android:valueTo
                浮点型,数值型或颜色值,必须的。代表动画结束时的属性值。颜色则用一个六位数的16进制数字来表示。(例如,#333333)

            android:valueFrom
                浮点型,数值型或颜色值。代表动画开始时的属性值。如果没有指定,则动画的其实值通过调用对象属性的get方法来获取。颜色则用一个六位数的16进制数字来表示。(例如,#333333)

            android:duration
                数值型。动画的时间,用毫秒表示。默认为300毫秒。

            android:startOffset
                数值型。调用start() 后延迟执行动画的毫秒数。

            android:repeatConunt
                数值型。重复执行动画的次数。设置一个正数,或者设置为"-1"来无限循环重复下去。例如,"1"值意味着在最初始的动画运行结束后再重复一次,所以该动画总共执行了两次。默认值为"0",意味着将不会重复执行(只执行一次)。

            android:repeatMode
                数值型。代表在动画结束时,该动画的行为。android:repeatCount 必须被设置为一个整数值或"-1"来使得该属性起到它应有的作用。设置为"reverse"使得每次迭代都让动画反转方向,或者设置为"repeat'来 使得动画的每次循环都从开头开始。

            android:valueType
                关键字。如果属性值是一个颜色那么不要指定这个属性。系统的动画框架会自动处理颜色值。
                值            描述
                intType        指定动画属性的值为整数型
                floatType(默认)    指定动画属性的值为浮点型

        <animator>
            在一个指定的时间内动态变化对象指定的属性,代表一个 ValueAnimator 。
            属性:

            同<objectAnimator>相同。

    示例:
        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 对象,然后在启动这个动画集之前先为所有的动画设置目标对象。通过方便的调用setTarget() 为AnimatorSet 的所有子集设置一个单一的目标对象。下面的代码展示如何做:
        AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
        R.anim.property_animator);
        set.setTarget(myObject);
        set.start();

    同样可以查看这里了解更多:
        ·Property Animation
        ·API Demos 这里举例说明了如何使用属性动画。

    视图动画(View Animation)
    视图动画框架提供了补间动画和帧动画两种动画,都可以定义在XML中。下面的章节描述了如何使用它们的方法。

    补间动画(Tween animation)
    定义于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>元素)。

    元素:
        <set>
            可以包含其他动画元素的容器 (<alpha>, <scale>, <translate>, <rotate>) 或其他的 <set> 元素. 代表一个 AnimationSet.
            属性:
            android:interpolator
            插值器资源。 应用到这个动画的插值器(Interpolator).。该属性的值必须被指向一个特定的代表插值器的XML资源(而不是一个插值器类的名字).。系统提 供了默认的插值器资源或者你可以创建自己的插值器资源,查看下面关于插值器(Interpolators)的更多描述。

            android:shareInterpolator
            布尔值. "true",如果你想在所有的子元素中共享插值器。
        <alpha>
        一个淡入或是淡出的动画。代表一个AlphaAnimation。
            属性:
            android:fromAlpha
                浮点型。起始的透明度偏移量,0.0 代表全透明,1.0 代表完全不透明。
            android:toAlpha
                浮点型。 结束的透明度偏移量,0.0 代表全透明,1.0 代表完全不透明。

            获取更多 <alpha> 所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
        <scale>
        可重新计算大小的动画,你可以通过指定的pivotX和pivotY属性来为图片的放大(或是缩小)指定一个中心点。例如,如果值为0,0(左上角),那所有的变化将向下和向右进行。代表一个ScaleAnimation。
            属性:
            android:fromXScale
                浮点型. 起始X轴偏移量,1.0代表无变化。
            android:toXScale
                浮点型. 结束X轴偏移量,1.0代表无变化。
            android:fromYScale
                浮点型. 起始Y轴偏移量,1.0代表无变化。
            android:toYScale
                浮点型. 结束Y轴偏移量,1.0代表无变化。
            android:pivotX
                浮点型. 当缩放时保持位置不变的X轴位置。
            android:pivotY
                浮点型. 当缩放时保持位置不变的Y轴位置。
            获取更多<scale>所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
        <translate>
        一种垂直或者水平的移动。下面的所有属性都支持以下三种格式的属性:1) 值从-100到100,以 % 结尾,指示相对于控件自身的一个百分比值;2) 值从-100到100,以 %p 结尾,指示相对于其父控件的一个百分比;3) 一个不带后缀的浮点数,指示一个相对值。代表一个 TranslateAnimation类。
            属性:
            android:fromXDelta
                浮点或者百分比。起始X轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
            android:toXDelta
                浮点或者百分比。结束X轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
            android:fromYDelta
                浮点或者百分比。起始Y轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
            android:toYDelta
                浮点或者百分比。结束Y轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
            获取更多 <translate>所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
        <rotate>
        一个旋转动画,代表 RotateAnimation类。
        属性:
            android:fromDegrees
                浮点型。起始角度。
            android:toDegrees
                浮点数。结束角度。
            android:pivotX
                浮点或者百分比。旋转中心点的X轴位置。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
            android:pivotY
                浮点或者百分比。旋转中心点的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>


    下面这代代码演示如何将这个动画(上面的XML文件所定义的)应用给 ImageView 并启动它:
    ImageView image = (ImageView) findViewById(R.id.image);
    Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    image.startAnimation(hyperspaceJump);
    还可以看这里:
        •    2D Graphics: Tween Animation

    插值器
    插值器是定义在XML中,影响着一个动画的变化率的一个动画调节器。这允许你现有的动画可以具有加速、减速、重复、回弹等效果。
    插值器通过在一个动画元素中定义android:interpolator属性来应用,属性值指向插值器资源。
    所有在Android中可用的插值器都是Interpolator的子类。每个插值器类,Android包含了一个你可以引用的公共的资源,以便可以通过android:interpolator属性将其应用给一个动画,下面的表格指定了每个插值器类的资源:
    插值器类(Interpolator class)                                 资源ID(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 插值器 详情。
    下面展示了如何通过android:interpolator属性使用上面列出的所有插值器中的某一个:

    <set android:interpolator="@android:anim/accelerate_interpolator">
        ...
    </set>


    自定义插值器(Custom interpolators)
    如 果你不满意上面所列出的由系统给你提供的插值器。你可以通过修改属性来创建一个自定义的插值器资源。例如,你可以调节 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
        浮点型。加速速率(默认为1)。

        <anticipateInterpolator>
        变化:开始时反向然后甩回去。
        属性:
        android:tension
            浮点型。张力的力度值(默认为2)。

        <anticipateOvershootInterpolator>
        变化:开始的时候向后然后向前甩一定值后返回最后的值。
        属性:
        android:tension
            浮点型。张力的力度值(默认为2)。
        android:extraTension
            浮点型。用来与tension相乘的张力值(默认为1.5)。

        <bounceInterpolator>
        变化:动画结束的时候回弹。
        没有属性。
        <cycleInterpolator>
        变化:动画重复特定的次数,速率变化沿着正玄曲线。
        属性:
        android:cycles
            整数型。重复的次数(默认为1)。

        <decelerateInterpolator>
        变化:开始时加速,然后慢。
        属性:
        android:factor
            浮点型。减速速率(默认为1)。

        <linearInterpolator>
        变化:以常量速率变化。
        没有属性。
        <overshootInterpolator>
        变化:向前甩出一定值之后再回到原来位置。
        属性:
        android:tension
            浮点型。张力的力度值(默认为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" />


    帧动画(Frame animation)
    使用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
            布尔值。.true:如果你想让动画只执行一次。false:如果想让动画循环。

        <item>
        动画的一帧。必须是<animation-list>元素的子元素。
        属性:
        android:drawable
        图片资源。被用于这一帧的图片。
        android:duration
        整数型。用来展示这一帧的时间,毫秒。
    例子:
    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>


    下面的代码演示了将这个动画应用为一个视图控件的背景,然后启动它:

    ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
    rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
    rocketAnimation.start();


    更多信息看:
        •    2D Graphics: Frame Animation

     
     
     
  • 相关阅读:
    算法与数据结构(十五) 归并排序(Swift 3.0版)
    算法与数据结构(十四) 堆排序 (Swift 3.0版)
    算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
    算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)
    算法与数据结构(十一) 平衡二叉树(AVL树)(Swift版)
    算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)
    算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找(Swift版)
    算法与数据结构(八) AOV网的关键路径(Swift版)
    算法与数据结构(七) AOV网的拓扑排序(Swift版)
    算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
  • 原文地址:https://www.cnblogs.com/emmet7life/p/4152966.html
Copyright © 2020-2023  润新知