首页 > 代码库 > Android 动画资源详解

Android 动画资源详解

属性动画:

  • 使对象的属性值在一定时间间隔内变化到某一个值。
  • http://developer.android.com/guide/topics/resources/animation-resource.html#Property

资源目录:rec\animator

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:ordering="sequentially" >   // together|sequentially

        <objectAnimator
            android:duration="2000"
            android:propertyName="y"
            android:valueTo="300"
            android:valueType="intType" />

        <objectAnimator
            android:duration="3000"
            android:propertyName="x"
            android:valueTo="220"
            android:valueType="intType" />

    </set> 

创建对应用的属性类

    class Move
    {
        private int y;
        private int x;

        public int getY()
        {  
            return y;
        }

        public void setY(int y)
        {
            this.y = y;
            button.layout(button.getLeft(), y, button.getRight(),
                    y + button.getMeasuredHeight());
        }

        public int getX()
        {
            return x;
        }

        public void setX(int x)
        {
            this.x = x;
            button.layout(x, button.getTop(), x + button.getMeasuredWidth(),
                    button.getBottom());
        }

    }

装载资源并执行动画

    // 装载属性动画资源
    AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,
            R.animator.property_anim);
    // 设置要控制的对象
    set.setTarget(move);
    // 开始动画
    set.start();

帧动画:

  • 在高频率地连续播放静态图像时就会产生动画的效果
  • http://developer.android.com/guide/topics/resources/animation-resource.html#Frame

资源目录:res/drawable/

  • 帧动画必须用<animation-list>标签作为根节点
  • android:oneshot="false"为无限循环播放,android:oneshot="true":播放一次
  • 第一个表示一个静态图像
  • android:duration="100":指定当前图像停留的时间

例子一:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/myanim1" android:duration="20" />
    <item android:drawable="@drawable/myanim2" android:duration="20" />
    <item android:drawable="@drawable/myanim3" android:duration="20" />
    <item android:drawable="@drawable/myanim4" android:duration="20" />
    <item android:drawable="@drawable/myanim5" android:duration="20" />
    <item android:drawable="@drawable/myanim6" android:duration="20" />
</animation-list>

补间动画:

  • 在高频率地连续播放静态图像时就会产生动画的效果(res/anim)
  • http://developer.android.com/guide/topics/resources/animation-resource.html#Tween

资源目录:res/anim/

<?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>

动画渲染器

定义:被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。

  • AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
  • AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
  • AnticipateInterpolator 开始的时候向后然后向前甩
  • AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
  • BounceInterpolator 动画结束的时候弹起
  • CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
  • DecelerateInterpolator 在动画开始的地方快然后慢
  • LinearInterpolator 以常量速率改变
  • OvershootInterpolator向前甩一定值后再回到原来位置