Flutter中很多用于动画的控件,这篇文章介绍动画控件AnimatedContainer,我们可以通俗的理解AnimatedContainer是带动画功能的Container,关于Container的详细介绍可以查看 AnimatedContainer只需要提供动画开始值和结束值,它就会动起来并不需要我们主动调用setState方法。 变化AnimatedContainer的宽高实现变大的效果,代码如下: bool click = false; @override Widget build(BuildContext context click; }); }, child: AnimatedContainer( height: click ? AnimatedContainer( curve: Curves.bounceIn, ... ) 如果想在动画执行结束时做一些事情,需要设置onEnd,代码如下: AnimatedContainer
AnimatedContainer 了解过Android 开发的应该知道,在Android 中给控件设置属性动画还是比较麻烦的,而且多个属性动画一起设置的话更是麻烦,要写很多行代码。 只需要使用 AnimatedContainer就够了。 AnimatedContainer看名字就应该知道,他是Container + Animation ,也就是带动画的容器。 AnimatedContainer继承于 ImplicitlyAnimatedWidget,我们点开父类的源码,可以看到类名上面的注释: /// An abstract widget for building 小结 使用Flutter 提供的 AnimatedContainer 可以很方便的实现 Widget的动画效果,在做一些简单的动画时可以说是非常方便了。 其实还有很多类似于 AnimatedContainer的 Widget,使用方法都类似,就不一一讲解了,如果有不知道在哪看的同学,请移步Flutter官网
重要消息 网易云【玩转大前端】配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 *** AnimatedContainer可以理解为Container Animat,也就是说带动画的容器 ,使用AnimatedContainer可以很方便的实现Widget的动画效果。 [在这里插入图片描述] 上图所示的效果过程就可以通过AnimatedContainer来轻松的实现,代码如下: ///AnimatedContainer 的基本使用 class AnimatedContainerPage Widget build(BuildContext context) { return Scaffold( appBar: new AppBar( title: Text("AnimatedContainer click; }); }, ///动画容器 child: AnimatedContainer(
1.AnimatedContainer 基本信息 AnimatedContainer 是一个隐式动画组件,和之前介绍过的 AnimatedOpacity 是同类,这种动画组件,只需要更改属性 + 重新构建 也就是说了解 Container 属性的用法之后,其实 AnimatedContainer 自然也就会了。 AnimatedContainer 组件的使用 我们先通过一个简单的例子看一下 AnimatedContainer 的使用方式。 120 : 100; }); } } 3.AnimatedContainer 组件的其他属性 AnimatedContainer 的其他某些属性也可以进行动画,比如下面的 alignment 二、AnimatedContainer 的源码实现 AnimatedContainer 继承自 ImplicitlyAnimatedWidget ,这也就说明它和 AnimatedOpacity 是同族的
flutter中的动画widget如果你只是希望动画展示widget的属性的变化,比如比如长度,高度,宽度或者颜色等进行动态变化,那么可以直接使用flutter提供的AnimatedContainer。 先来看下AnimatedContainer的定义:class AnimatedContainer extends ImplicitlyAnimatedWidgetAnimatedContainer继承自 AnimatedContainers使用举例AnimatedContainer是一个container,所以它可以包含child属性,但是AnimatedContainer的动画只是针对容器本身来说的, 如下所示:body: Center( child: AnimatedContainer( width: 200, height: 200, 接下来我们只需要在setState方法中对AnimatedContainer中的属性进行变化,就会自动触发动画效果。
AnimationWidgets 在Flutter内部为们提供了很多的动画Wdiget,比如AnimatedContainer、AnimatedCrossFade、AnimatedOpacity、AnimatedSize 现在我们看下如何来使用这些基于动画的Widget AnimatedContainer AnimatedContainer看名字不难知道它是Container的动画版本,使用AnimatedContainer AnimatedContainer继承于ImplicitlyAnimatedWidget,相应的我们需要传入动画的播放时间(必须填写)和插值器类型(有默认值) 然后,我们就可以让AnimatedContainer 所以还是看个例子吧 可以看见我们在Column的第一个Widget中放了一个AnimatedContainer,指定了插值器的类型为Curves.bounceOut并且指定动画时长为3秒。 我们设置AnimatedContainer的底部padding的默认值为100.0,这样动画就会根据我们设置的值去改变底部padding,当我们点击按钮时就会改变设置的padding值来从新开始动画。
首先我们需要使用 AnimatedPositioned 和 AnimatedContainer : AnimatedPositioned 用于在 Stack 里实现位移动画效果 AnimatedContainer 用于实现大小变化的动画效果 接着我们定义一个 PositionItem ,将 AnimatedPositioned 和 AnimatedContainer 嵌套在一起,并且通过 PositionedItemData 进阶学习 那 AnimatedPositioned 和 AnimatedContainer 是如何实现动画效果 ?这里就要介绍一个抽象父类 ImplicitlyAnimatedWidget 。 其实 AnimatedContainer 本身就是一个很具备代表性的实现,如果你去看它的源码,就可以看到它的实现很简单,只需要在 forEachTween 里实现参数对应的 Tween 实现即可。 图片 图片 总结 最后总结一下,本篇主要介绍了: 利用 AnimatedPositioned 和 AnimatedContainer 快速实现切换动画效果 介绍 ImplicitlyAnimatedWidget
一、Flutter 动画分类 类型 组件 说明 隐式动画 AnimatedContainer, AnimatedOpacity, AnimatedPadding, AnimatedAlign 属性变化自动过渡动画 二、AnimatedContainer 1️⃣ 基本用法 class AnimatedContainerDemo extends StatefulWidget{ @override _AnimatedContainerDemoState override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('AnimatedContainer 示例')), body: Center( child: AnimatedContainer( width: _width, height 你已经学会: AnimatedContainer、AnimatedOpacity、AnimatedAlign 隐式动画 AnimationController + Tween + AnimatedBuilder
下面通过源码我们能知道,CircleAvatar 本质上就是基于 AnimatedContainer 实现了,这个组件在上一篇已经介绍了,详见: AnimatedContainer 。 CircleAvatar 是基于 AnimatedContainer 组件实现的功能,其中前背景图片被用于 decoration 和 foregroundDecoration 属性中。
key, required Listenable animation, required this.builder, this.child, }) 复制代码 AnimatedContainer AnimatedContainer 是 Container 的动画替换组件,可以通过修改动画过程中的尺寸、对齐方式,tranform 参数等实现容器的动画效果。 我们使用了 AnimatedContainer 实现了一个笑脸动画: 你看我做的这个笑嘻嘻的动态表情,像不像求码农修电脑的样子? AnimatedContainer的构造方法如下,可以看到基本上所有的布局相关的属性都可以受动效控制。 AnimatedContainer({ Key?
每个项包含: - 设备状态指示灯(AnimatedContainer) - 实时数据折线图(fl_chart) - 操作按钮(ElevatedButton)3. **重绘风暴**: - 每个列表项包含AnimatedContainer和动态图表,导致整个列表频繁重绘 - 解决方案:使用RepaintBoundary隔离复杂组件2. , child: Card( child: Column( children: [ // 设备状态指示灯(优化前:整个Card重绘) AnimatedContainer
当构造函数获得活动的 bool 变量值时,我们可以使用它来为主体 - “AnimatedContainer”设置动画,就像我在下面的代码中所做的那样。 width: 80.0, child: Row( children: [ AnimatedContainer onExit: (value) { setState(() { hovered = false; }); }, child: AnimatedContainer Colors.white : Colors.black, ), ), ), AnimatedContainer onExit: (value) { setState(() { hovered = false; }); }, child: AnimatedContainer
对于隐式组件来说: 已经内置:直接使用,当然也可以看下AnimatedContainer组件,AnimatedContainer是非常强大且用途广泛的动画组件。
对于隐式组件来说: 已经内置:直接使用,当然也可以看下AnimatedContainer组件,AnimatedContainer是非常强大且用途广泛的动画组件。
平滑动画过渡 AnimatedContainer( duration: const Duration(milliseconds: 500), curve: Curves.easeOut, child : Card(...), ) 结果卡片出现时带有淡入+缩放感(由 AnimatedContainer 驱动); 提升交互流畅度,避免生硬切换。 = null) AnimatedContainer( duration: const Duration(milliseconds: 500),
实现方式 Tween动画 缩放、旋转、平移、透明度、淡入淡出等 AnimatedBuilder Animated的建造者类, 可以把需要添加动画的组件传进去, 然后借助它实现一些动画效果; AnimatedContainer
背景渐变动画:AnimatedContainer AnimatedContainer( duration: const Duration(milliseconds: 400), decoration < 0) { _nextCity(); // 左滑 → 下一个 } }, child: AnimatedContainer(
/widgets/AnimatedPadding/ AnimatedCrossFade:http://laomengit.com/flutter/widgets/AnimatedCrossFade/ AnimatedContainer :http://laomengit.com/flutter/widgets/AnimatedContainer/ AnimatedPositioned:http://laomengit.com/flutter
当构造函数获得活动的 bool 变量值时,我们可以使用它来为主体 - “AnimatedContainer”设置动画,就像我在下面的代码中所做的那样。 width: 80.0, child: Row( children: [ AnimatedContainer onExit: (value) { setState(() { hovered = false; }); }, child: AnimatedContainer Colors.white : Colors.black, ), ), ), AnimatedContainer onExit: (value) { setState(() { hovered = false; }); }, child: AnimatedContainer
flutter.github.io/assets-for-api-docs/assets/widgets/animated_padding.mp4} /// /// See also: /// /// * [AnimatedContainer