Android 动画锦集
Android 动画可分为逐帧动画、补间动画、属性动画。使用传统的逐帧动画、补间动画可以实现 Android 基本的动画效果;使用属性动画可以实现大部分自定义的动画,灵活性更强。而在 Android 5.0 中新增了 VectorDrawble,使得 Android 动画的实现又多了一种途径。
一、逐帧动画
逐帧动画,顾名思义,由一组图片按照一定的顺序进行展示的过程。
<?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/loading00" android:duration="30"/>
<item android:drawable="@drawable/loading01" android:duration="30"/>
<item android:drawable="@drawable/loading02" android:duration="30"/>
<item android:drawable="@drawable/loading03" android:duration="30"/>
<item android:drawable="@drawable/loading04" android:duration="30"/>
<item android:drawable="@drawable/loading05" android:duration="30"/>
<item android:drawable="@drawable/loading06" android:duration="30"/>
<item android:drawable="@drawable/loading07" android:duration="30"/>
<item android:drawable="@drawable/loading08" android:duration="30"/>
<item android:drawable="@drawable/loading09" android:duration="30"/>
<item android:drawable="@drawable/loading10" android:duration="30"/>
<item android:drawable="@drawable/loading11" android:duration="30"/>
<item android:drawable="@drawable/loading12" android:duration="30"/>
<item android:drawable="@drawable/loading13" android:duration="30"/>
<item android:drawable="@drawable/loading14" android:duration="30"/>
<item android:drawable="@drawable/loading15" android:duration="30"/>
</animation-list>
在 xml 中定义好之后就可以自由设置 View 的各种 drawable,比如 ImageView 的背景:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/loading" />
在代码中需要通过调用 ((AnimationDrawable)imageView.getBackground()).start() 方法完成动画的启动。
除此之外,还可以在代码中通过调用 AnimationDrawable 的 addFrame 方法动态添加逐帧动画 item drawable。
oneshot
如果为 ture,则只会执行一次,如果为 false,则会一直循环执行。
animation-list
逐帧动画必须要以该元素作为根元素。
二、补间动画
补间动画是通过将 View 的旋转、透明渐变、缩放、移动进行一系列转换的过程,了解过 Photoshop 的用户自然能够明白。
补间动画通过在 xml 中以 alpha、scale、translate、rotate 为根元素进行定义,也可以用动画集(set 元素,对应 AnimationSet)的方式将这四种动画
定义在一起同时执行或顺序执行。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="500"
android:fromXScale="100%"
android:fromYScale="0%"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="50%"
android:pivotY="0%"
android:toXScale="100%"
android:toYScale="100%" />
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
alpha
alpha 值的范围在 0.0 和 1.0 之间,由浮点数表示。
scale
缩放动画,其值可用浮点数和百分数形式表示,比如 0.5 或 50%,0.5 表示缩小一倍,2.0 表示放大一倍。
translate
平移动画,其值支持三种数值表示方式,分别为 浮点数
、百分数
、百分数p
。比如,以“浮点数”表示,代表相对于自身原始位置的像素值;以“百分数”表示,代表相对于自身的百分比;以“百分数p”表示,代表相对于父布局的百分比。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100.0%p"
android:toXDelta="0.0%p"/>
<translate
android:fromXDelta="100.0%"
android:toXDelta="200.0"/>
</set>
rotate
和 translate 一样,其值也有三种表示方式,分别表示相对于自身的具体像素值、相对于自身的百分比和相对于父布局的百分比。
interpolator
插值器,默认值是匀速插值器。可以定义自己的插值器,也可以直接使用系统提供的插值器。系统提供的插值器如下:
插值器 | 说明 |
---|---|
AccelerateInterpolator | 加速 |
AccelerateDecelerateInterpolator | 先加速再减速 |
LinearInterpolator | 匀速 |
DecelerateInterpolator | 减速 |
AnticipateInterpolator | 先回退再加速 |
AnticipateOvershootInterpolator | 起点回退,超出终点后再回到终点 |
BounceInterpolator | 最后阶段回弹效果 |
CycleInterpolator | 循环插值器 |
OvershootInterpolator | 快速到达终点后回退到终点 |
PathInterpolator | 根据路径执行动画 |
上表中的插值器都可在 android.view.animation 包内找到。
三、属性动画
未完待续...
本文由
Fynn_ 原创,未经许可,不得转载!