
给Flutter
组件设置动画的时候,肯定会使用到Animation
类,它是核心类。这篇博客分享Animation
类相关的知识,希望对看文章的小伙伴有所帮助。
Animation类
Animation
是动画核心类,主要保存动画播放过程中的当前插值
和状态
。
Animation
的储存插值区间是double
类型的[0.0,1.0]
。
Animation类源码
abstract class Animation<T> extends Listenable implements ValueListenable<T> {
const Animation();
// 添加动画监听器
@override
void addListener(VoidCallback listener);
// 移除动画监听器
@override
void removeListener(VoidCallback listener);
// 添加动画状态监听器
void addStatusListener(AnimationStatusListener listener);
// 移除动画状态监听器
void removeStatusListener(AnimationStatusListener listener);
// 获取动画当前状态
AnimationStatus get status;
// 获取动画当前的值
@override
T get value;
设置对象监听addListener
addListener
用于给Animation
添加帧监听器,每一帧都会被调用,当帧监听器监听到状态发生改变后会调用setState()
来触发视图的重建。情况如下::
- 当动画的状态值发生变化时,会通知所有通过
addListener
的监听器。 - 正在监听动画的
state
对象会调用自身的setState
方法,将自身传入这些监听器的回调函数来通知widget
系统需要根据新状态值进行重新创建。
调用方法如下:
animation.addListener(() => setState((){}));
设置状态监听addStatusListener
addStatusListener
用于给Animation
对象添加动画状态改变监听器,动画开始、结束、正向或反向时会调用状态改变的监听器。情况如下:
- 当动画的状态发生变化时,会通知所有通过
addStatusListener
添加的监听器。 - 动画会从
dismissed(动画停止的状态)
开始,表示它处于变化区间的开始点。
调用方法如下:
animation.addStatusListener((status) {});
AnimationStatus
AnimationStatus
是一个枚举类,主要保存动画的4种状态,分别是动画停止状态
、从头到尾执行中状态
、从尾到头执行中状态
、动画执行完状态
、
enum AnimationStatus {
/// 动画停止状态
dismissed,
/// 从头到尾执行中状态
forward,
/// `从尾到头执行中状态
reverse,
/// 动画执行完状态
completed,
}
网友评论