系列文章

  1. Flutter 旋转动画 — RotationTransition
  2. Flutter 平移动画 — 4种实现方式
  3. Flutter 淡入淡出与逐渐出现动画
  4. Flutter 尺寸缩放、形状、颜色、阴影变换动画
  5. Flutter 列表Item动画 — AnimatedList实现Item左进左出、淡入淡出
  6. Flutter Hero 实现共享元素转场动画
  7. Flutter Hero 实现径向变换动画 — 圆形变成矩形的转场动画
  8. Flutter 自定义动画 — 数字递增动画和文字逐行逐字出现或消失动画

文章目录

  • 系列文章
  • 1 旋转动画效果对比
  • 2 动画基础知识
  • 3 旋转动画案例
    • 3.1 线性变化的旋转动画(补间动画 Tween)
      • 3.1.1 首先创建 Animation 与 AnimationController
      • 3.1.2 构建Widget RotationTransition
      • 3.1.3 效果图
    • 3.2 非线性变化的旋转动画(Curved­Animation)
      • 3.2.1 代码实现
      • 3.2.2 效果图
    • 3.3 动画延时重复(每次重复播放前停顿一下)
      • 3.3.1 代码实现
      • 3.3.2 效果图
    • 3.4 手动控制旋转动画
      • 3.4.1 代码实现
      • 3.4.2 效果图
  • 4 注意

1 旋转动画效果对比

2 动画基础知识

  • Animation 是 Flutter 动画库中的核心类,它插入用于引导动画的值。
  • AnimationController 管理动画。例如控制动画开始、停止、前进、后退等。
  • CurvedAnimation 将进程定义为非线性曲线。
  • Tween 在被动画对象使用的数据范围之间进行插值。 例如,Tween 可以定义从红色到蓝色或从 0 到 255 的插值。
  • Listeners 和 StatusListeners 可监控动画状态的变化。
  • AnimatedWidget 是展示动画的Widget,Flutter提供一些动画Widget让我们快速实现动画效果。例如:
    AnimatedBuilder、 AnimatedModalBarrier、DecoratedBoxTransition、FadeTransition、PositionedTransition、RelativePositionedTransition、RotationTransition、ScaleTransition、SizeTransition、SlideTransition

3 旋转动画案例

RotationTransition 继承于AnimatedWidget,是一个提供旋转功能的Widget,需要传入参数 Animation<double>。

Animation<double>中的值为 v,则旋转的弧度是 v * 2 * π

3.1 线性变化的旋转动画(补间动画 Tween)

3.1.1 首先创建 Animation 与 AnimationController

  /// 会重复播放的控制器late final AnimationController _repeatController;/// 线性动画late final Animation<double> _animation;@overridevoid initState() {super.initState();/// 动画持续时间是 3秒,此处的this指 TickerProviderStateMixin_repeatController = AnimationController(duration: const Duration(seconds: 3),vsync: this,)..repeat(); // 设置动画重复播放// 创建一个从0到360弧度的补间动画 v * 2 * π_animation = Tween<double>(begin: 0, end: 1).animate(_repeatController);}

3.1.2 构建Widget RotationTransition

  @overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: RotationTransition(turns: _animation,child: const Icon(Icons.arrow_drop_up, size: 180),),),);}

3.1.3 效果图


3.2 非线性变化的旋转动画(Curved­Animation)

3.2.1 代码实现

实现方式与线性变化的旋转动画类似,只是需要将 Tween 更改为 Curved­Animation

  class _RotationTransitionPageState extends State<RotationTransitionPage>with TickerProviderStateMixin {/// 会重复播放的控制器late final AnimationController _repeatController;/// 非线性动画late final Animation<double> _curveAnimation;@overridevoid initState() {super.initState();_repeatController = AnimationController(duration: const Duration(seconds: 3),vsync: this,)..repeat();/// Curves 存在多种模式,具体的效果查看Curves源码,有链接展示动画效果_curveAnimation = CurvedAnimation(parent: _repeatController,curve: Curves.easeInCirc,);}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: RotationTransition(turns: _curveAnimation,child: const Icon(Icons.arrow_drop_up, size: 180),),),);}
}

3.2.2 效果图


3.3 动画延时重复(每次重复播放前停顿一下)

实现思路:监听动画的状态,每当动画播放完成时延时一段时间,然后启动动画开始播放。

3.3.1 代码实现

 class _RotationTransitionPageState extends State<RotationTransitionPage>with TickerProviderStateMixin {/// 重复播放前需要停顿一下的控制器late final AnimationController _delayRepeatController;/// 延时重复播放动画late final Animation<double> _delayAnimation;@overridevoid initState() {super.initState();_delayRepeatController = AnimationController(duration: const Duration(seconds: 3),vsync: this,)//  添加动画监听..addListener(() {// 获取动画当前的状态var status = _delayRepeatController.status;if (status == AnimationStatus.completed) {// 延时1秒Future.delayed(const Duration(seconds: 1), () {//从0开始向前播放_delayRepeatController.forward(from: 0.0);});}})..forward();_delayAnimation =Tween<double>(begin: 0, end: 1).animate(_delayRepeatController);}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: RotationTransition(turns: _delayAnimation,child: const Icon(Icons.arrow_drop_up, size: 180),),),);}
}

3.3.2 效果图


3.4 手动控制旋转动画

实现方式:使用 AnimationController 的 animateTo 函数。

3.4.1 代码实现

class _RotationTransitionPageState extends State<RotationTransitionPage>with TickerProviderStateMixin {/// 手动控制动画的控制器late final AnimationController _manualController;/// 手动控制late final Animation<double> _manualAnimation;@overridevoid initState() {super.initState();/// 不设置重复,使用代码控制进度,动画时间1秒_manualController = AnimationController(vsync: this,duration: const Duration(seconds: 1),);_manualAnimation =Tween<double>(begin: 0, end: 1).animate(_manualController);}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: RotationTransition(turns: _manualAnimation,child: CupertinoButton(onPressed: () {/// 获取动画当前的值var value = _manualController.value;/// 0.5代表 180弧度if (value == 0.5) {_manualController.animateTo(0);} else {_manualController.animateTo(0.5);}},child: const Icon(Icons.arrow_drop_up, size: 180),),),),);}
}

3.4.2 效果图

4 注意

别忘了释放AnimationController 资源。

  @overridevoid dispose() {_controller.dispose();super.dispose();}

Flutter 旋转动画 — RotationTransition相关推荐

  1. Flutter 平移动画 — 4种实现方式

    系列文章 Flutter 旋转动画 - RotationTransition Flutter 平移动画 - 4种实现方式 Flutter 淡入淡出与逐渐出现动画 Flutter 尺寸缩放.形状.颜色. ...

  2. Flutter 自定义动画 — 数字递增动画和文字逐行逐字出现或消失动画

    系列文章 Flutter 旋转动画 - RotationTransition Flutter 平移动画 - 4种实现方式 Flutter 淡入淡出与逐渐出现动画 Flutter 尺寸缩放.形状.颜色. ...

  3. flutter RotationTransition实现旋转动画

    更多文章请查看 flutter从入门 到精通 flutter 动画状态监听器 AnimationController //动画控制器AnimationController controller;//A ...

  4. flutter 点击旋转动画_让动画实现更简单,Flutter 动画简易教程!

    Flutter中的动画功能强大且易于使用.接下来通过一个具体的实例,您将学到关于 Flutter 动画的一切. 难度:中级 今天,我们无法想象移动应用程序里面没有任何动画,当您从一页跳转到另一页时,或 ...

  5. cell 滑动实现旋转动画效果

    效果图(真机效果好一点.毕竟 gif) tableView角度旋转动画.gif -(void)tableView:(UITableView *)tableView willDisplayCell:(U ...

  6. 如何用纯 CSS 创作一个方块旋转动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gjgyWm 可交互视频 ...

  7. 不炫技,SVG+CSS3 旋转动画属性就能实现的梦幻效果

    CSS3的动画相关的基础的属性基本都涉猎过了,个人认为,其中最复杂的是d:path()路径变形动画,超过3D,而位移.轨迹.旋转.缩放.斜切什么的,相对简单一些,但作为非动画设计师而言,灵活的掌握这些 ...

  8. 代码创建 WPF 旋转动画

    原文:代码创建 WPF 旋转动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a771948524/article/details/9304001 ...

  9. CSS3 skew倾斜、rotate旋转动画

    css3出现之前,我们实现一个对象的一组连续动画需要通过JavaScript或Jquery编写,脚本代码较为复杂: 若需要实现倾斜.旋转之类的动画难度将更高(我还没试过用JavaScript或Jque ...

  10. android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上...

    先上效果图: 我这里用的是GifCam来制作的gif动画,能够在http://download.csdn.net/detail/baidu_nod/7628461下载, 制作过程是先起一个模拟器,然后 ...

最新文章

  1. 数据科学Python训练营课程:从初级到高级 Python for Data Science Bootcamp Course:Beginner to Advanced
  2. 基于3D的结构光的应用
  3. 进程间通信之命名管道
  4. python初学者web还是爬虫-python 爬虫《从入门到放弃》
  5. go 怎么等待所有的协程完成_Go 编程:如何实现协程调度的精准控制
  6. java实现在线浏览zip文件及文件下载
  7. 上传到服务器gd不支持,安装dedecms出现GD不支持。我的php5.5的。怎么解决?
  8. Spring 4.1和Java 8:java.util.Optional
  9. 【问答集锦】从数据中挖掘宝藏,深度学习赋予机器更多“思想”
  10. PHP检测每一段代码执行时间
  11. Android Studio 安装遇到问题及解决方法
  12. Java多线程深度探索
  13. 拓端tecdat|R语言再保险合同定价案例研究
  14. 网站服务器mine类型设置,windows服务器如何配置MIME类型
  15. 高斯c语言百度云免费,高斯数学(1-6年级)精品课程全集百度云下载
  16. 电子通讯录(文件保存版)
  17. 运维审计系统----堡垒机的部署
  18. QTTabBar安装与使用: 更胜浏览器的Windows平台浏览文件方式
  19. URAL 1099 Work Scheduling
  20. 基于Java Springboot+Vue+MyBatis音乐播放系统设计实现

热门文章

  1. 硬盘运行与“AHCI 模式”还是“IDE 模式”
  2. python case用法_Python Switch Case三种实现方法代码实例
  3. python3 使用writerows写入csv时有多余空行的处理办法
  4. Javascript和C#正则只保留英文、数字、汉语、空格
  5. Axure8.0使用教程
  6. Frame-Relay基础及配置学习笔记
  7. 小学身高体重测试软件,儿童身高体重在线测评
  8. linux 最新cpu型号,linux如何查看cpu型号
  9. 基于openstack构建私有云实践
  10. 微信公众号运营推广用户主动分享背后的秘密