默认情况下,AnimationController对象的范围从0.0到1.0。如果您需要不同的范围或不同的数据类型,则可以使用Tween来配置动画以生成不同的范围或数据类型的值。
Tween是一个无状态(stateless)对象,需要begin和end值。Tween的唯一职责就是定义从输入范围到输出范围的映射。输入范围通常为0.0到1.0,但这不是必须的。
Tween继承自Animatable<T>,而不是继承自Animation<T>。Animatable与Animation相似,不是必须输出double值。
Tween对象不存储任何状态。相反,它提供了evaluate(Animation<double> animation)方法将映射函数应用于动画当前值。 Animation对象的当前值可以通过value()方法取到。evaluate函数还执行一些其它处理,例如分别确保在动画值为0.0和1.0时返回开始和结束状态。
要使用Tween对象,请调用其animate()方法,传入一个控制器对象。
Tween生成的值可以是不同类型的,可以是数字,或者颜色
_animation= Tween(begin:32.0,end: 100.0).animate(_animationController); _animationColor=ColorTween(begin: Colors.red[100],end: Colors.red[900]).animate(_animationController);
在Tween的基础上实现了不同类型的估值器,如下所示:
ReverseTween
ColorTween
SizeTween
RectTween
IntTween
StepTween
ConstantTween
示例
import 'package:flutter/material.dart'; class AnimateDemo extends StatelessWidget { @override Widget build(BuildContext context) { return AnimateDemoHome(); } } class AnimateDemoHome extends StatefulWidget { @override _AnimateDemoHomeState createState() => _AnimateDemoHomeState(); } class _AnimateDemoHomeState extends State<AnimateDemoHome> with TickerProviderStateMixin { //定义动画控制器变量类型 AnimationController _animationController; Animation _animation; Animation _animationColor; @override void initState() { // TODO: implement initState super.initState(); //创建动画控制器 _animationController = AnimationController( duration: Duration(milliseconds: 1000), vsync: this, ); //创建Tween设置动画运动的值,会返回一个Animation,通过这个变量可以控制动画 _animation= Tween(begin:200.0,end:400.0).animate(_animationController); //生成颜色 _animationColor=ColorTween(begin: Colors.red[100],end: Colors.red[900]).animate(_animationController); //监听控制器的动画 _animationController.addListener(() { //这里的值取决于设置的动画值 setState(() {}); }); //监听动画的状态 _animationController.addStatusListener((AnimationStatus status) { print(status); }); _animationController.forward(); } @override void dispose() { // TODO: implement dispose //销毁动画 _animationController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Animate案例'), ), body: Center( child: Container( width: _animation.value, height: _animation.value, color: _animationColor.value, ), ), ); } }
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接