当前位置: 首页 > java >正文

flutter常用动画

Flutter 动画基础概念

术语解释
Animation表示动画的值,通常是一个 double (0.0 ~ 1.0) 或其他数值。
AnimationController管理动画的时间进度和状态。需要 Ticker (vsync) 来驱动。
Tween定义动画的取值范围,如从 0.0 到 1.0,从红色到蓝色。
Curve定义动画的加速度曲线,如线性、加速、减速、弹性等。
AnimatedWidget封装了动画的 Widget,如 AnimatedBuilderAnimatedContainer
AnimatedBuilder监听动画状态并重建 UI。
setState手动刷新 UI,需要与 AnimationController 配合使用。

常用动画类型

类型特点示例
隐式动画 (Implicit Animation)简单、易用,适合简单场景AnimatedContainerAnimatedOpacityAnimatedAlign
显式动画 (Explicit Animation)灵活、强大,适合复杂场景AnimationController + Tween + AnimatedBuilder
交织动画 (TweenSequence)多段组合动画,控制更复杂的曲线多阶段颜色、位置、缩放的渐变
物理动画 (Physics-based)仿真效果,如弹簧、惯性SpringSimulationFrictionSimulation
Hero 动画页面跳转时的共享元素动画Hero 小部件

示例代码

1️⃣ 隐式动画 - AnimatedContainer

class MyImplicitAnimation extends StatefulWidget {@override_MyImplicitAnimationState createState() => _MyImplicitAnimationState();
}class _MyImplicitAnimationState extends State<MyImplicitAnimation> {double _size = 100;@overrideWidget build(BuildContext context) {return Center(child: GestureDetector(onTap: () {setState(() {_size = _size == 100 ? 200 : 100;});},child: AnimatedContainer(duration: Duration(seconds: 1),width: _size,height: _size,color: Colors.blue,curve: Curves.easeInOut,),),);}
}

2️⃣ 显式动画 - AnimationController + Tween

class MyExplicitAnimation extends StatefulWidget {@override_MyExplicitAnimationState createState() => _MyExplicitAnimationState();
}class _MyExplicitAnimationState extends State<MyExplicitAnimation> with SingleTickerProviderStateMixin {late AnimationController _controller;late Animation<double> _animation;@overridevoid initState() {super.initState();_controller = AnimationController(duration: Duration(seconds: 2),vsync: this,)..repeat(reverse: true);_animation = Tween<double>(begin: 100, end: 200).animate(CurvedAnimation(parent: _controller, curve: Curves.easeInOut),);}@overridevoid dispose() {_controller.dispose();super.dispose();}@overrideWidget build(BuildContext context) {return Center(child: AnimatedBuilder(animation: _animation,builder: (context, child) {return Container(width: _animation.value,height: _animation.value,color: Colors.red,);},),);}
}
http://www.xdnf.cn/news/9430.html

相关文章:

  • c++ 调用opencv或pcl流程
  • 【Tomcat】Tomcat端口仅允许本地访问设置方法
  • 接地气的方式认识JVM(一)
  • i2c-tools使用的介绍及示例(i2cdetect,i2cdump, i2cget、i2cset、i2ctransfer)
  • 解决微信小程序中 Flex 布局下 margin-right 不生效的问题
  • 通用大数据可视化展示平台模板 – 免费HTML源码
  • 聊聊JVM怎么调优?(实战总结)
  • 【Doris基础】Apache Doris中FE和BE的职责详解
  • 端午节互动网站
  • 学习threejs,超炫银河黑洞效果模拟
  • 【Halcon】 affine_trans_image 算子详解
  • vue组件和插件的区别
  • Kafka KRaft + SSL + SASL/PLAIN 部署文档
  • 【剑指offer】链表 系列
  • 万字详解RTR RTSP SDP RTCP
  • DeepSeek R1模型已完成小版本试升级
  • Unity屏幕适配——背景适配
  • leetcode 3372. 连接两棵树后最大目标节点数目 I
  • P8-大模型微调
  • Day05
  • Vuer开源程序 是一个轻量级的可视化工具包,用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR,可以在移动设备上运行。
  • Ethan的日记5/28
  • leetcode0670. 最大交换-medium
  • 让 Deepseek GPS测速
  • 电脑革命家测试版:硬件检测,6MB 轻量无广告 清理垃圾 + 禁用系统更新
  • Oracle Linux 9 安装 EMCC 13.5:避坑细节与实战经验汇总!
  • GO——内存逃逸分析
  • Flutter、React Native、Unity 下的 iOS 性能与调试实践:兼容性挑战与应对策略(含 KeyMob 工具经验)
  • 云服务器是什么,和服务器有什么区别?
  • 系统赛数据库的一些记录