盒子
盒子
文章目录
  1. Tween animation

Android动画资源(二)——补间动画资源

Android animations.png
Android动画资源系列文章:Android动画资源文件总结

Tween animation

  • 用XML定义的动画,在图形上执行诸如旋转、透明度变化、移动和拉伸等转换。
  • 文件位置
    res/anim/filename.xml
    该文件名将作为资源ID。
  • 资源引用方式
    Java中: R.anim.filename
    XML中: @[package:]anim/filename
  • 语法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?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>元素。

  • 元素

    • <set>
      能够包含<alpha>, <scale>, <translate>, <rotate>或者其他<set>的容器。 相当于java代码中的AnimationSet
      属性
      • android:interpolator
        插值器, 该值必须是插值器的资源的引用。 可以使用平台默认插值器资源,页可以创建自己的插值器。
      • android:shareInterpolator
        Boolean类型。如果希望所有子元素都使用同一个插值器,则为“true”。
    • <alpha>
      淡入淡出动画。相当于Java代码中的AlphaAnimation.
      属性
      • android:fromAlpha
        float类型。透明度的起始值,fromAlpha为0.0代表透明,fromAlpha为1.0代表不透明。
      • android:toAlpha
        float类型。透明度的终止值,fromAlpha为0.0代表透明,fromAlpha为1.0代表不透明。
    • <scale>
      缩放动画: pivotX和pivotY能够指定缩放点。相当于Java代码中的ScaleAnimation。
      属性
      • android:fromXScale X方向开始缩放时的值
      • android:toXScaleX 方向结束缩放时的值
      • android:fromYScale Y方向开始缩放时的值
      • android:toYScale Y方向结束缩放时的值
      • android:pivotX X方向的缩放点
      • android:pivotY Y方向的缩放点
    • <translate>
      水平或竖直移动动画。
      属性值支持以下三种格式:
      • 值从-100%到100%,表示相对于自身的百分比;
        • 值从-100%p到100%p,表示相对于parent的百分比;
        • 一个没有后缀的浮点值,表示一个绝对值。相当于Java代码中的translateanimation。
          属性
        • android:fromXDelta Float or 百分比类型.X方向开始时的偏移量。值为Float类型,表示相对于正常位置的像素值,值为百分比类型且以%结尾,表示相对于控件宽度的百分比;值为百分比类型且以%p结尾,表示相对于父控件的百分比
        • android:toXDelta Floator 百分比类型 X方向结束时的偏移量。 值为Float类型,表示相对于正常位置的像素值,值为百分比类型且以%结尾,表示相对于控件宽度的百分比;值为百分比类型且以%p结尾,表示相对于父控件的百分比
        • android:fromYDelta Float or 百分比类型 Y方向开始时的偏移量。值为Float类型,表示相对于正常位置的像素值,值为百分比类型且以%结尾,表示相对于控件宽度的百分比;值为百分比类型且以%p结尾,表示相对于父控件的百分比
        • android:toYDelta Float or 百分比类型 Y方向结束时的偏移量。值为Float类型,表示相对于正常位置的像素值,值为百分比类型且以%结尾,表示相对于控件宽度的百分比;值为百分比类型且以%p结尾,表示相对于父控件的百分比

    • 旋转动画。相当于Java代码中的RotateAnimation。
  • 举例
    文件保存位置:res/anim/hyperspace_jump.xml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <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>

下面代码将上面hyperspace_jump.xml动画应用到ImageView上:

1
2
3
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);