Android开发拾穗Android开发Android开发

Android 动画锦集

2019-07-14  本文已影响10人  a57ecf3aaaf2

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_ 原创,未经许可,不得转载!

上一篇下一篇

猜你喜欢

热点阅读