其他分享
首页 > 其他分享> > Android 补间动画

Android 补间动画

作者:互联网

补间动画:通过使用 Animation 对单张图片执行一系列转换来创建动画。

在 XML 中定义的动画,用于对图形执行旋转、淡出、移动和拉伸等转换。

动画文件放在res/anim/,该文件名将用作资源 ID。

移动示例

先用一个例子建立直观的认识。新建一个动画xml,实现从左到右的效果。
move_hor_1.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="200"
        android:toXDelta="-100%" />

    <translate
        android:duration="400"
        android:startOffset="200"
        android:toXDelta="100%" />
</set>

要使用这个动画,需要用到AnimationUtils.loadAnimation(getContext(), R.anim.move_hor_1);来加载动画。得到对象mAnimation
交给View.startAnimation(mAnimation);来启动。

上面的动画例子效果图

仔细看一下动画xml里的内容

实际上,第二个translate周期是400毫秒,它“等了”200毫米才开始执行。
把View从左边移动到了右边。

缩放示例

除了位移,还可以执行缩放效果。

可以看到示例种先放大再缩小回去。主要是用了android:repeatMode="reverse"android:repeatCount="1"

完整动画xml如下

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="600"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:toXScale="1.35"
        android:toYScale="1.35" />
</set>

scale里面我们遇到了几个元素pivotXrepeatCountrepeatMode

多个动画元素的例子

一个<set>集合里可以包含多个元素。

录制gif的出来发现快结束时总有一个抖动,是录制的问题。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <rotate
        android:duration="500"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />

    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="50%" />

    <alpha
        android:duration="500"
        android:fromAlpha="1"
        android:toAlpha="0.5" />

    <set
        android:interpolator="@android:anim/decelerate_interpolator"
        android:startOffset="500">
        <rotate
            android:duration="400"
            android:fromDegrees="360"
            android:pivotX="100%"
            android:pivotY="50%"
            android:toDegrees="0" />

        <translate
            android:duration="400"
            android:fromXDelta="0%"
            android:toXDelta="-50%" />

        <alpha
            android:duration="400"
            android:fromAlpha="0.5"
            android:toAlpha="1" />

    </set>
</set>

<set>里放置着多个元素,可以把<set>放进<set>里。
我们分成出发和回来两个动作

出发:

第一个<rotate>是从自己的中心位置开始。
<translate>水平向右走了50%。

回来:

后面<rotate>pivotX需要考虑到出发时水平移动了50%,因此pivotX取值100%。

<translate>从0%走到-50%即可。

动画xml元素

下面总结一下各个属性

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

set

容纳其他动画元素( 或其他 元素)的容器。代表 AnimatorSet
可以放置多个动画元素,组合在一起。每个set可定义自己的 ordering 属性。

alpha

淡入或淡出动画。对应AlphaAnimation类。

scale

缩放动画,调整大小的动画;对应ScaleAnimation
指定 pivotXpivotY,来指定View向外(或向内)扩展的中心点。
例如,如果这两个值为 0、0(左上角),则所有扩展均向右下方向进行。

translate

移动动画。垂直或水平移动。或者水平和垂直移动一起。对应TranslateAnimation
支持采用以下三种格式之一的以下属性:从 -100 到 100 的以“%”结尾的值,表示相对于自身的百分比;从 -100 到 100 的以“%p”结尾的值,表示相对于其父项的百分比;不带后缀的浮点值,表示绝对值。

属性:

rotate

旋转动画。对应RotateAnimation

属性:

参考

标签:动画,百分比,浮点数,偏移,5%,补间,Android,android
来源: https://www.cnblogs.com/rustfisher/p/15129304.html