Android

Android的三种动画

先看一下动画的效果: 动画效果

Android的动画分为三种,分别为帧动画、补间动画和属性动画。下面说一下各种动画的特点。

1. 帧动画

帧动画就是指将图片逐帧的播放出来,在src/main/res/drawable目录下添加animation_frame.xml文件(xml实现方式,实现红、绿、蓝、的切换):

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@android:color/holo_red_dark"
        android:duration="500" />
    <item
        android:drawable="@android:color/holo_green_dark"
        android:duration="500" />
    <item
        android:drawable="@android:color/holo_blue_dark"
        android:duration="500" />
</animation-list>

2. 补间动画

补间动画的特点是将开始帧和结束帧给出,系统自动计算动画的播放,下面是用xml实现的缩放动画:

<?xml version="1.0" encoding="utf-8"?><!--从0放大到原始大小-->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="0"
    android:fromYScale="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="100%"
    android:toYScale="100%" />

其中duration属性表示动画持续时长,fromXScale表示开始时x轴的形变量,fromYScale表示开始时y轴的形变量,toXScaletoYScale表示结束时的x轴和y轴的形变量,pivotXpivotY表示缩放的锚点,也就是说指定围绕那个点进行缩放的。

3. 属性动画

帧动画和补间动画都没有将View的属性进行改变,而属性动画则是将View的属性进行改变而产生的动画,因此这样View的属性也就永久的改变了,通过属性动画,我们可以实现比较复杂的动画。下面是用xml实现的组合动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together">
    <objectAnimator
        android:duration="1000"
        android:propertyName="translationX"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="200"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotation"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="360"
        android:valueType="floatType" />
    <set>
        <objectAnimator
            android:duration="1000"
            android:propertyName="scaleX"
            android:repeatCount="1"
            android:repeatMode="reverse"
            android:valueFrom="1.0f"
            android:valueTo="2.0f"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="1000"
            android:propertyName="scaleY"
            android:repeatCount="1"
            android:repeatMode="reverse"
            android:valueFrom="1.0f"
            android:valueTo="2.0f"
            android:valueType="floatType" />
    </set>
</set>

这三种动画都可以使用代码实现,这里就留给读者自己去考虑咯。

这个是动画Demo(使用kotlin编写)的项目地址:https://github.com/Samoy/AnimationDemo

最近的文章

一些React第三方库收藏

更早的文章

初始Redux

欢迎在评论区留下您的见解~