在日常的Android开发中,我们可能经常会使用到动画,但是Android有哪些动画,它们有什么区别,我们也需要去了解。下面就对Android中常用的动画做一下总结。
前面一篇文章已经总结了传统动画,如果需要了解,可以点击下面链接。
Android 动画(一)Animation。
或者想了解下插值器和估值器,可以点击下面链接。
Android 动画(二)Animator。
插值器(Interpolator)
简介
作用:设置 属性值 从初始值过渡到结束值 的变化规律;如动画效果变化的模式,如匀速变化、加速变化 等等。
使用方法
在XML代码中设置插值器属性android:interpolator
1
2
3
4
5
6
7
8
9
10
11<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
// 通过资源ID设置插值器
android:interpolator="@android:anim/overshoot_interpolator"
android:duration="3000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="2"
android:toYScale="2" />通过java代码设置
1
2
3
4
5
6
7
8
9
10
11// 步骤1:创建 需要设置动画的 视图View
Button mButton = (Button) findViewById(R.id.Button);
// 步骤2:创建透明度动画的对象 & 设置动画效果
Animation alphaAnimation = new AlphaAnimation(1,0);
alphaAnimation.setDuration(3000);
// 步骤3:创建对应的插值器类对象
Interpolator overshootInterpolator = new OvershootInterpolator();
// 步骤4:给动画设置插值器
alphaAnimation.setInterpolator(overshootInterpolator);
// 步骤5:播放动画
mButton.startAnimation(alphaAnimation);
自定义插值器
- 本质:根据动画的进度(0%-100%)计算出当前属性值改变的百分比
- 具体使用:自定义插值器需要实现 Interpolator / TimeInterpolator接口 & 复写getInterpolation()
系统提供相关插值器的插值器的理解:
1 | // 匀速 LinearInterpolator |
估值器(TypeEvaluator)
简介
作用:设置 属性值 从初始值过渡到结束值 的变化具体数值
使用方法
1 | // 在第3个参数中传入对应估值器类的对象 |
系统内置的估值器有3个:
IntEvaluator:以整型的形式从初始值 - 结束值 进行过渡
FloatEvaluator:以浮点型的形式从初始值 - 结束值 进行过渡
ArgbEvaluator:以Argb类型的形式从初始值 - 结束值 进行过渡
自定义估值器
自定义估值器需要实现 TypeEvaluator接口 & 复写evaluate()
看一个已经实现好的系统内置的浮点型插值器:FloatEvaluator1
2
3
4
5
6
7
8
9
10public class FloatEvaluator implements TypeEvaluator {
// FloatEvaluator实现了TypeEvaluator接口
// 重写evaluate()
public Object evaluate(float fraction, Object startValue, Object endValue) {
// fraction:表示动画完成度(根据它来计算当前动画的值)
// startValue、endValue:动画的初始值和结束值
float startFloat = ((Number) startValue).floatValue();
return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
}
}
初始值 过渡 到结束值 的算法是:
- 用结束值减去初始值,算出它们之间的差值
- 用上述差值乘以fraction系数
- 再加上初始值,就得到当前动画的值