返回

Flutter 动画:初学者指南

Android

Flutter 动画入门

Flutter 是一个强大的跨平台框架,它使您能够使用相同的代码库为多种设备构建美丽的应用程序。它的动画系统特别令人印象深刻,它允许您创建平滑、响应迅速的动画,从而增强用户体验。

本文将引导您了解 Flutter 动画的基础知识。我们将涵盖以下主题:

  • StatefulWidgets 和 AnimationControllers
  • 创建基本属性动画
  • 使用 AnimatedWidgets 简化代码
  • 探索 Timeline、曲线和补间
  • 将 Tween 用于复杂的动画

StatefulWidgets 和 AnimationControllers

Flutter 中的动画是使用 StatefulWidgets 实现的。StatefulWidgets 是可以随着时间改变状态的特殊类型的 Widget。它们具有一个 initState() 方法,该方法在 Widget 首次创建时调用,以及一个 build() 方法,该方法每当 Widget 的状态改变时都会调用。

要创建动画,我们首先需要创建一个 AnimationController。AnimationController 是一个特殊类型的 Animation,它控制动画的播放时间、方向和速度。我们可以使用 AnimationController.controller() 构造函数创建 AnimationController,该函数采用一个 Duration 参数,该参数指定动画的持续时间。

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(duration: Duration(seconds: 1));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _controller,
      builder: (context, child) {
        // 在此处使用 _controller.value 构建您的动画
        return Container();
      },
    );
  }
}

创建基本属性动画

使用 AnimationController,我们可以创建基本属性动画。属性动画是修改小部件的单个属性(如其颜色或大小)的动画。

要创建属性动画,我们首先需要创建一个 Tween。Tween 是一个类,它定义了动画的起始值和结束值。然后,我们可以使用 TweenAnimationBuilder Widget 来构建属性动画。TweenAnimationBuilder 采用 TweenAnimationControllerbuilder 函数作为参数。

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(duration: Duration(seconds: 1));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TweenAnimationBuilder(
      tween: Tween<double>(begin: 0, end: 1),
      duration: Duration(seconds: 1),
      builder: (context, value, child) {
        return Container(
          width: value * 100,
          height: value * 100,
          color: Colors.blue,
        );
      },
    );
  }
}

使用 AnimatedWidgets 简化代码

AnimatedWidgets 是一个特殊类型的 Widget,它简化了动画代码。AnimatedWidgets 监听动画值的变化,并自动更新其外观,而无需手动调用 setState()

要使用 AnimatedWidgets,只需扩展 AnimatedWidget 类并重写 build() 方法。在 build() 方法中,您可以使用 animation 属性来访问动画的当前值。

class MyWidget extends AnimatedWidget {
  MyWidget({Key key, Animation<double> animation})
      : super(key: key, listenable: animation);

  @override
  Widget build(BuildContext context) {
    final animation = listenable as Animation<double>;

    return Container(
      width: animation.value * 100,
      height: animation.value * 100,
      color: Colors.blue,
    );
  }
}

探索 Timeline、曲线和补间

Timeline 是一个类,它允许您安排动画。您可以使用 Timeline 将多个动画组合在一起,并控制它们如何一起播放。

曲线是一个类,它定义了动画的速度。您可以使用曲线来创建各种效果,例如缓入、缓出和弹跳。

补间是两个值之间的平滑过渡。您可以使用补间来创建复杂的动画,例如颜色渐变或路径动画。

将 Tween 用于复杂的动画

Tween 是一个强大的工具,可用于创建复杂的动画。Tween 允许您定义动画的起始值和结束值,以及它们之间的插值方式。

要使用 Tween,您首先需要创建一个 Tween 对象。然后,您可以使用 lerp() 方法来插值起始值和结束值。lerp() 方法采用一个 t 参数,该参数指定插值量,并在 0.01.0 之间。

Tween<Color> colorTween = Tween<Color>(begin: Colors.red, end: Colors.blue);

Color interpolatedColor = colorTween.lerp(0.5); // 返回中间的紫色

结论

Flutter 动画系统是一个强大的工具,可用于创建平滑、响应迅速的动画。通过了解 StatefulWidgets、AnimationControllers、AnimatedWidgets、Timelines、曲线和补间,您可以构建令人惊叹的动画,以增强您的 Flutter 应用程序的用户体验。

我希望本指南对您入门 Flutter 动画有所帮助。如果您还有任何疑问,请随时在评论中提出。