animation library

Flutter动画系统.

要使用,请导入package:flutter/animation.dart .

该库提供了在Flutter中实现动画的基本构建块. 框架的其他层使用这些构建块为应用程序提供高级动画支持. 例如,小部件库包括ImplicitlyAnimatedWidgetAnimatedWidget ,它们使动画Widget的某些属性变得容易. 如果这些动画小部件不足以满足给定用例,则可以使用此库提供的基本构建块来实现自定义动画效果.

This library depends only on core Dart libraries and the physics.dart library.

Foundations: the Animation class

Flutter将动画表示为在给定持续时间内变化的值,并且该值可以是任何类型. 例如,它可以是一个精度值,指示Widget淡出时的当前不透明度. 或者,它可能是控件的当前背景颜色 ,可以从一种颜色平滑过渡到另一种颜色. 动画的当前值由Animation对象表示,该对象是动画库的中心类. 除了当前动画值之外, Animation对象还存储当前AnimationStatus . 状态指示动画当前在概念上是从头到尾还是以相反的方式运行. 它还可能指示动画当前在开始或结尾处停止.

其他对象可以在动画上注册侦听器,以便在动画值和/或动画状态更改时得到通知. 控件可以通过Animation.addListener注册这样的侦听器,以便每当该动画值改变时就用当前动画值重建自身. 例如,小部件可能会在每次值更改时收听动画以将其不透明度更新为动画的值. 同样,当Animation结束时,通过Animation.addStatusListener注册状态侦听器可能会触发另一个动作.

例如,以下视频显示了窗口小部件的不透明动画的当前动画状态和动画值随时间的变化. 这个动画是由驱动AnimationController (见下节). 在动画触发之前,动画状态为"已关闭",并且值为0.0. 当值从0.0到1.0逐渐在小部件中消失时,状态将更改为"前进". 当小部件以1.0的动画值完全淡入时,状态为"完成". 当动画再次触发以使小部件退回淡出时,动画状态将更改为"反向",并且动画值将恢复为0.0. 此时,小部件将完全淡出,动画状态将切换回"已关闭",直到再次触发动画.

尽管您不能直接实例化Animation (这是一个抽象类),但是可以使用AnimationController创建一个实例.

Powering animations: AnimationController

AnimationController是一种特殊的Animation ,它在运行应用程序的设备准备显示新帧时提高其动画值(通常,此速率约为每秒60个值). 一个AnimationController地方的可用于动画的预期. 顾名思义, AnimationController还提供了对其Animation的控制:它实现了一些方法,可以随时停止动画并向前和向后运行动画.

默认情况下,当向前运行时, AnimationController在给定的持续时间内从0.0到1.0线性增加其动画值. 对于许多用例,您可能希望该值具有不同的类型,更改动画值的范围或更改动画在值之间的移动方式. 这可以通过包装动画来实现:将其包装在Animatable中 (请参见下文)可将动画值的范围更改为其他范围或类型(例如,对ColorRect进行动画处理). 此外,通过将Curve包装在CurvedAnimation中 ,可以将Curve应用于动画. 代替线性增加动画值,弯曲动画会根据提供的曲线更改其值. 该框架附带许多内置曲线(请参见Curves ). 例如, Curves.easeOutCubic在动画开始时迅速增加动画值,然后减慢直到达到目标值:

Animating different types: Animatable

Animatable<T>是一个对象,它以Animation<double>作为输入并产生类型T的值. 这些类型的对象可用于将AnimationAnimation的动画值范围(或任何其他double类型的Animation )转换为不同的范围. 该新范围甚至不必再为double类型. 用的帮助下可动画吐温TweenSequence (见下段)的AnimationController可以用来平滑地过渡颜色 S, 矩形 S, 尺寸 S和更多类型从一个值到另一个在给定的持续时间.

Interpolating values: Tweens

Tween应用于double类型的Animation ,以更改动画值的范围和类型. 例如,要在两个Color之间平滑地转换Widget的背景,可以使用ColorTween . 每个补间指定一个开始值和一个结束值. 作为动画值动画的供电吐温进展从0.0到1.0其产生内插其开始和结束值之间的值. 当补间动画的动画值接近1.0时, 补间生成的值通常会越来越接近其最终值.

以下视频显示了IntTweenTween<double>ColorTween生成的示例值,动画值从0.0到1.0并返回到0.0:

AnimationAnimationController可以为多个Tween提供动力. 例如,要并行动画化小部件的大小和颜色,请创建一个AnimationController来为SizeTweenColorTween供电 .

该框架附带了许多Tween子类( IntTweenSizeTweenRectTween等),以对通用属性进行动画处理.

Staggered animations: TweenSequences

TweenSequence可以帮助分阶段平滑地给定属性动画. 序列中的每个Tween负责一个不同的阶段,并具有关联的权重. 动画运行时,各阶段会依次执行. 例如,假设您要对窗口小部件的背景进行动画处理,从黄色变为绿色,然后在短暂的暂停后变为红色. 为此,您可以在补间序列中指定三个补间:一个从蓝色到绿色动画的ColorTween ,一个仅保持绿色的ConstantTween ,另一个从绿色到黄色动画的ColorTween . 对于每个补间,您需要选择一个权重,以指示在该补间上花费的时间与所有其他补间相比的比率. 如果我们给ColorTween s分配2的权重,向ConstantTween分配1的权重,则ColorTween s描述的过渡所花费的时间将是ConstantTween的两倍. TweenSequence动画驱动,就像常规的Tween一样 :随着强大的 Animation从0.0到1.0运行, TweenSequence贯穿其所有阶段.

以下视频显示了上一段中描述的动画:

也可以看看:

Classes

AlwaysStoppedAnimation<T>
An animation that is always stopped at a given value. [...]
Animatable<T>
在输入Animation <double>作为输入的情况下可以产生T类型值的对象. [...]
Animation<T>
值为T类型的动画. [...]
AnimationController
动画的控制器. [...]
AnimationMax<T extends num>
跟踪最多两个其他动画的动画. [...]
AnimationMean
double的动画,它跟踪其他两个动画的均值. [...]
AnimationMin<T extends num>
跟踪至少两个其他动画的动画. [...]
CatmullRomCurve
动画缓和曲线,使用向心Catmull-Rom样条曲线平滑地通过给定的控制点. [...]
CatmullRomSpline
使用向心Catmull-Rom样条曲线平滑地通过给定控制点的2D样条曲线. [...]
ColorTween
两种颜色之间的插值. [...]
CompoundAnimation<T>
用于组合多个动画的界面. 子类只需要实现value即可控制子动画的组合方式. 可以链接以组合两个以上的动画. [...]
ConstantTween<T>
具有恒定值的补间.
Cubic
单位间隔的三次多项式映射. [...]
Curve
参数动画缓和曲线,即单位间隔到单位间隔的映射. [...]
Curve2D
定义用于评估2D参数曲线的API的抽象类. [...]
Curve2DSample
一个类,用于保存2D参数曲线的样本,该样本包含参数值t处的曲线 (X,Y坐标). [...]
CurvedAnimation
将曲线应用于另一个动画的动画. [...]
Curves
常见动画曲线的集合. [...]
CurveTween
通过给定曲线变换给定动画的值. [...]
ElasticInCurve
振荡曲线,其幅度在超出其边界时会增大. [...]
ElasticInOutCurve
一条振荡曲线,先增大后缩小,同时超出其边界. [...]
ElasticOutCurve
一条振荡曲线,其幅度在缩小时超过了其界限. [...]
FlippedCurve
它是给定曲线的反向反转的曲线. [...]
FlippedTweenSequence
允许创建一个翻转动画,其值由Tween的序列定义. [...]
Interval
的曲线为0.0直到开始 ,然后弯曲的(根据曲线从0.0)在开始至1.0在端部 ,然后保持1.0过去 . [...]
IntTween
四舍五入的两个整数之间的插值. [...]
ParametricCurve<T>
提供用于评估参数曲线的接口的抽象类. [...]
ProxyAnimation
作为另一个动画的代理的动画. [...]
RectTween
两个矩形之间的插值. [...]
ReverseAnimation
与另一个动画相反的动画. [...]
ReverseTween<T>
补间以相反的方式评估其父级 .
SawTooth
在单位间隔内重复给定次数的锯齿曲线. [...]
SizeTween
两种尺寸之间的插值. [...]
StepTween
下限的两个整数之间的插值. [...]
Threshold
在到达阈值之前为0.0的曲线,然后跳至1.0. [...]
TickerFuture
表示正在进行的股票代号序列的对象. [...]
TrainHoppingAnimation
该动画从代理一个动画开始,但是当该动画的值与第二个动画的值交叉时(因为第二个动画的方向相反,或者因为一个动画超过另一个动画),该动画跳到了另一个动画的代理位置.动画. [...]
Tween<T extends dynamic>
A linear interpolation between a beginning and ending value. [...]
TweenSequence<T>
允许创建一个动画,其值由一系列Tween定义. [...]
TweenSequenceItem<T>
一个TweenSequence的一个元素的简单持有人.

Mixins

AnimationEagerListenerMixin
一个mixin用dispose契约替换didRegisterListener / didUnregisterListener契约. [...]
AnimationLazyListenerMixin
一个仅在该对象已注册侦听器时帮助侦听另一个对象的mixin. [...]
AnimationLocalListenersMixin
一个实现addListener / removeListener协议并在调用notifyListeners时通知所有注册的侦听器的mixin . [...]
AnimationLocalStatusListenersMixin
一个mixin,它实现addStatusListener / removeStatusListener协议,并在调用notifyStatusListeners时通知所有已注册的侦听器. [...]
AnimationWithParentMixin<T>
通过将其行为推迟到给定的 Animation来实现大多数Animation接口. [...]

Constants

kAlwaysCompleteAnimation → const Animation<double>
始终是完整的动画. [...]
_AlwaysCompleteAnimation()
kAlwaysDismissedAnimation → const Animation<double>
始终被关闭的动画. [...]
_AlwaysDismissedAnimation()

Enums

AnimationBehavior
配置禁用动画AnimationController的行为. [...]
AnimationStatus
动画的状态

Typedefs

AnimationStatusListener(AnimationStatus status) → void
使用Animation.addStatusListener附加的侦听器的签名.

Exceptions / Errors

TickerCanceled
取消股票行情指示器时, TickerFuture.orCancel上的股票行对象抛出的异常.