flutter中的动画交织动画

有时候一个完整的动画可能是由不同的动画叠加起来,如一个动画执行完成在执行另一个动画,这时候我们需要多个动画对象(Animation),但是我们不需要多个动画控制器(AnimationController),只需要给每一动画对象设置时间间隔(Interval)。

有动画都由同一个AnimationController (opens new window)驱动,无论动画需要持续多长时间,控制器的值必须在0.0到1.0之间,而每个动画的间隔(Interval)也必须介于0.0和1.0之间。对于在间隔中设置动画的每个属性,需要分别创建一个Tween (opens new window)用于指定该属性的开始值和结束值。也就是说0.0到1.0代表整个动画过程,我们可以给不同动画指定不同的起始点和终止点来决定它们的开始时间和终止时间。

示例
圆形先缩小然后改变透明度

 AnimationController animationController;
 Animation<double> animationSize;
 Animation<double> animationOpacity;
animationController =
 AnimationController(duration: Duration(seconds: 2), vsync: this);
animationSize = Tween<double>(begin: 80, end: 60).animate(
      CurvedAnimation(
        parent: animationController,
        curve: Interval(
          0.0, 0.6, //间隔,前60%的动画时间
          curve: Curves.ease,
        ),
      ),
    );
    animationOpacity = Tween(begin: 1.0, end: 0.5).animate(CurvedAnimation(
        parent: animationController,
        curve: Interval(0.6, 1, curve: Curves.easeIn)));

 animationController.forward();

         Container(
              width: MAX_SIZE + 50,
              height: MAX_SIZE + 50,
              color: Colors.blue,
              //不加这一句子container 会变得和父container 大小一样
              alignment: Alignment.center,
              child: Opacity(
                opacity: animationOpacity.value,
                child: Container(
                  width: animationSize.value,
                  height: animationSize.value,
                  decoration: BoxDecoration(
                    color: Colors.red,
                    borderRadius: BorderRadius.circular(MAX_SIZE / 2),
                  ),
                  child: Icon(
                    Icons.mic,
                    color: Colors.white,
                  ),
                  // transform:
                  //     Matrix4.rotationY(animationTransform.evaluate(animation)),
                ),
              ),
            ),

注意setstate方法更新视图

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 交织动画 有些时候我们可能会需要一些复杂的动画,这些动画可能由一个动画序列或重叠的动画组成,要实现这种效果,使用交...
    zombie阅读 495评论 0 1
  • Flutter的动画体系是怎么运作的,各组件之间的关联关系及原理什么,隐式动画、显式动画怎么区分,本文将会进行详细...
    whqfor阅读 2,083评论 0 6
  • 如果我们想要一些东西动画,我们必须改变大小或改变连续帧中对象的位置。例如,在第1帧中,我们的对象位于位置x,在第2...
    开心人开发世界阅读 2,136评论 0 8
  • 交错动画 你将学习到什么: 交错动画由序列或重叠的动画组成。 要创建交错动画,使用多个动画对象。 一个Animat...
    文vane阅读 1,290评论 0 1
  • 参考来源:https://flutterchina.club/animations/ 动画类型 补间(Tween)...
    _白羊阅读 18,238评论 2 11