Flutter动画基础

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是一个控制动画类型的类,定义了动画的映射规则。

posted @ 2021-11-04 11:14  野生的Lemon柠檬  阅读(272)  评论(0编辑  收藏  举报

呱呱呱呱呱🐸