Flutter开发之——动画-同时执行多个Tween动画

本文详细介绍了在Flutter中如何使用AnimationController、Tween和Curve来创建动画效果。通过实例代码展示了如何初始化两个AnimationController,分别用于控制尺寸和颜色的变化,并应用不同的曲线实现平滑和弹跳的过渡。点击触发动画,Container的高度和颜色会根据设定的动画参数动态变化。
摘要由CSDN通过智能技术生成

一 概述

  • 一个AnimationController ,只需要一个SingleTickerProviderStateMixin
  • 需要有多个AnimationController 时,需要修改为TickerProviderStateMixin

二 AnimationController 、 Tween 、Curve

2.1 AnimationController 、 Tween

AnimationController调用Tween

_animation = _controller.drive(Tween(begin: 100.0, end: 200.0)

Tween调用AnimationController

  _animation = Tween(begin: 100.0, end: 200.0).animate(_controller);

2.2 加入Curve后

AnimationController调用Tween

_animation = _controller.drive(CurveTween(curve: Curves.linear)).drive(Tween(begin: 100.0, end: 200.0)

Tween调用AnimationController

_animation = Tween(begin: 100.0, end: 200.0)
    .chain(CurveTween(curve: Curves.linear))
    .animate(_controller);

三 示例

3.1 代码

  class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
  
  AnimationController _sizeController;
  AnimationController _colorController;
  Animation<double> _sizeAnimation;
  Animation<Color> _colorAnimation;
  
   @override
  void initState() {
    super.initState();

    _sizeController =
    AnimationController(vsync: this, duration: Duration(milliseconds: 2000))
      ..addListener(() {
        setState(() {});
      });

    _sizeAnimation = _sizeController
        .drive(CurveTween(curve: Curves.linear))
        .drive(Tween(begin: 100.0, end: 200.0));

    _colorController =
    AnimationController(vsync: this, duration: Duration(milliseconds: 1000))
      ..addListener(() {
        setState(() {});
      });

    _colorAnimation = _colorController
        .drive(CurveTween(curve: Curves.bounceIn))
        .drive(ColorTween(begin: Colors.blue, end: Colors.red));
  } 
  
 Center(
          child: GestureDetector(
            onTap: () {
              _sizeController.forward();
              _colorController.forward();
            },
            child: Container(
              height: _sizeAnimation.value,
              width: _sizeAnimation.value,
              color: _colorAnimation.value,
              alignment: Alignment.center,
              child: Text('点我开始动画',),
            ),
          ),
        ) 

3.2 效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值