Flutter动画基础
在Flutter中,提供了4个动画对象:
编号 | 名称 | 说明 |
---|---|---|
1 | Animation | 是Flutter动画的核心抽象类,包含了动画的当前值和状态两个属性。 |
2 | AnumationController | 是Animation的控制器,动画的开始、结束、停止、反向均由它控制,并且可以通过Listener组件和StatusListener组件来管理动画状态。 |
3 | Tween | 是一个动画插值器,可以用它配置动画从开始到结束的变化规律。 |
4 | Curve | 是一个动画曲线,用来控制动画随时间的变化,默认为匀速的线性动画。 |
Animation
这是一个Flutter动画中的核心抽象类,本身与视图渲染没有任何的区别。Animation依赖于Curve,Animation的对象是一个可以在一段时间内依次生成一个区间值的类,其输出值可以是线性的、非线性的,也可以是一个步进函数或者任何其他曲线函数等。
Animation的对象状态值有4种:
- dismissed,动画处于开始状态
- forward,动画正在正向执行
- reverse,动画正在反向执行
- completed,动画处于结束状态
Anumation的对象有两个监听器:
- Listeners,对应的是addListener(),这是用于添加帧监听器,当真监听器监听到状态发生改变时,会通过调用setState()来触发视图重建。
- StatusListeners,对应的是addStatusListener(),用于状态改变时从而进行发生响应。
AnimationController
是动画控制器,用于控制动画的开始、结束、正向、反向等操作。也是一个特殊的Animation对象。使用AnimationController创建的Animation对象,默认情况下不能够运行,需要调用forward()方法后,才能运行。在AnimationController中,提供了一些常见的函数,如下:
- forward(),开始播放动画
- stop(),停止动画播放
- reset(),重置动画为初始态
- reverse(),反向播放动画,需要正向播放动画后,才能够进行反向播放动画
- repeat(),循环播放动画
- dispose(),销毁动画,释放动画资源
在创建AnimationController的时候,需要传递一个vsync参数,这个参数接收一个TickerProvider对象,该对象是一个抽象类,其是依赖于SchedulerBinding。SchedulerBinding又是Flutter在启动时会自动创建的,通过SchedulerBinding可以给每一次屏幕刷新添加回调。而Ticker对象是通过SchedulerBinding进行回调的,因此在每一次的屏幕刷新时,都会调用TickerCallback。
Curve
Curve主要用于控制动画随时间的变化率,默认为均匀的变化率,也就是线性动画。在Flutter开发中,可以通过CurvedAnimation来指定动画的曲线。Curves类是一个预置的枚举类,定义了许多常用的动画曲线。如下:
编号 | 动画曲线 | 说明 |
---|---|---|
1 | linear | 匀速曲线 |
2 | decelerate | 匀减速动画 |
3 | ease | 先加速后减速动画 |
easeIn | 先快后慢动画 | |
easeOut | 先慢后快动画 | |
6 | easeInOut | 先慢,然后加速,最后减速动画 |
Curve的作用就是控制动画随时间的变化率,使用前首先需要创建Animator对象,实际使用中,会使用AnimatorController对象创建Animator对象。在Flutter中,还可以自己创建动画曲线,继承Curve对象,然后重写transform方法。
class SineCurve extends Curve{
@override
double transform(double t){
return math.sin(t*math.PI*2);
}
}
Tween
该类的职责是定义从输入范围到输出范围的一个映射,因此Tween对象的构造函数需要传入begin和end两个参数。Tween是一个无状态对象,继承与Animatable< T >。Animatable是一个控制动画类型的类,定义了动画的映射规则。