哪个网站 可以做快递单录入,seo全站优化全案例,网站更换备案,公益广告 公司网站建设中...flutter开发实战-TweenSequence实现动画序列
一、TweenSequence
TweenSequence是允许创建一个Animation由一系列补间动画来确定值#xff0c;每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。
TweenSequence 动画组类TweenSequenceItem 用来定义每一个动…flutter开发实战-TweenSequence实现动画序列
一、TweenSequence
TweenSequence是允许创建一个Animation由一系列补间动画来确定值每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。
TweenSequence 动画组类TweenSequenceItem 用来定义每一个动画的具体实现的类
TweenSequenceItem中的weight属性是来设定动画执行的时间权重即是在整个动画过程当前动画执行时长占总时长的比例.
如一个动画差值占的时间比例为weight2/(weight1weight2)
二、TweenSequence实现动画序列
声明动画控制器AnimationController 和 动画Animation。 通过TweenSequence实现动画序列
示例代码如下
class TweenSequencePage extends StatefulWidget {const TweenSequencePage({super.key});overrideStateTweenSequencePage createState() _TweenSequencePageState();
}class _TweenSequencePageState extends StateTweenSequencePagewith TickerProviderStateMixin {AnimationController? _animationController;Animationdouble? _animation;overridevoid initState() {super.initState();_animationController AnimationController(duration: Duration(milliseconds: 1000), vsync: this);TweenSequenceItemdouble downMarginItem TweenSequenceItemdouble(tween: Tween(begin: 1.0, end: 300.0), weight: 5);TweenSequenceItemdouble upMarginItem TweenSequenceItemdouble(tween: Tween(begin: 300.0, end: 50.0),weight: 4,);TweenSequenceItemdouble downMarginItem2 TweenSequenceItemdouble(tween: Tween(begin: 50.0, end: 200.0),weight: 3,);TweenSequenceItemdouble upMarginItem2 TweenSequenceItemdouble(tween: Tween(begin: 200.0, end: 100.0),weight: 2,);TweenSequenceItemdouble endMarginItem TweenSequenceItemdouble(tween: Tween(begin: 100.0, end: 50.0),weight: 1,);TweenSequencedouble tweenSequence TweenSequencedouble([downMarginItem,upMarginItem,downMarginItem2,upMarginItem2,endMarginItem,]);_animation tweenSequence.animate(_animationController!);_animation!.addListener(() {setState(() {});});_animation!.addStatusListener((status) {print(TweenSequence status:${status});if (status AnimationStatus.completed) {///正向执行完毕后立刻反向执行倒回去_animationController?.reverse();} else if (status AnimationStatus.dismissed) {///无次数限定执行_animationController?.forward();}});}void startEasyAnimation() {_animationController?.forward();}overridevoid dispose() {_animationController?.dispose();super.dispose();}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(TweenSequencePage),),body: Stack(alignment: Alignment.center, children: [Column(mainAxisAlignment: MainAxisAlignment.center,children: Widget[Container(width: 200,height: 50,color: Colors.blue,margin: EdgeInsets.only(top: _animation?.value ?? 0),),],),Positioned(bottom: 20,child: OutlinedButton(onPressed: startEasyAnimation,child: Text(点击执行动画,style: TextStyle(color: Colors.black38),),),),]),);}
}
三、小结
flutter开发实战-TweenSequence实现动画序列
学习记录每天不停进步。