Flutter 旋转动画 — RotationTransition

本文详细介绍了如何在Flutter中创建旋转动画,包括线性变化的RotationTransition、非线性变化的CurvedAnimation,以及动画的延时重复和手动控制。通过实例代码展示了不同类型的旋转效果,并提供了关键代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章

  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 动画基础知识

  • 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;

  @override
  void 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

  @override
  Widget build(BuildContext context) {
   
    return Scaffold
### 关于 Flutter 动画的使用教程 #### 隐式动画简介 隐式动画是一种简化版的动画形式,在 Flutter 中,这种类型的动画可以通过属性变化自动生成平滑过渡效果[^1]。这种方式不需要开发者手动编写大量代码来控制每一个帧的状态。 #### 实现点击旋转动画的例子 为了使动画实现更加简便,可以参照 Dribbble 上分享的一种名为 “Guillotine Menu”的交互设计模式,并尝试用 Flutter 来逐步重现这一特效[^2]。此案例展示了如何利用手势识别器监听用户的触摸事件并触发相应的变换操作,比如当检测到点击动作时执行元素绕中心轴线顺时针或逆时针方向上的转动。 ```dart import 'package:flutter/material.dart'; class RotateOnTap extends StatefulWidget { @override _RotateOnTapState createState() => _RotateOnTapState(); } class _RotateOnTapState extends State<RotateOnTap> with SingleTickerProviderStateMixin { late AnimationController controller; void initState(){ super.initState(); controller = AnimationController( duration: const Duration(milliseconds: 500), vsync: this, ); } @override Widget build(BuildContext context){ return GestureDetector( onTapDown:(details) {controller.forward();}, child: RotationTransition( turns: Tween(begin: 0.0, end: 1.0).animate(controller), child: Container(/* Your widget here */), ), ); } } ``` 这段代码定义了一个 `GestureDetector` 小部件用于捕捉触碰输入;每当发生按下行为时就会调用控制器的方法启动一次完整的循环过程,从而带动内部嵌套的小部件按照指定的角度范围完成旋转变换。 #### 更多资源推荐 对于希望深入了解 animate 插件及其功能特性的朋友来说,除了上述基础概念外还有许多值得探索的地方。建议查阅官方文档获取最权威的信息以及查看项目仓库里的例子以获得灵感和支持[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值