先看一下动画的效果:
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轴的形变量,toXScale
和toYScale
表示结束时的x轴和y轴的形变量,pivotX
和pivotY
表示缩放的锚点,也就是说指定围绕那个点进行缩放的。
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
欢迎在评论区留下您的见解~