广告
返回顶部
首页 > 资讯 > 移动开发 >Flutter实现心动的动画特效
  • 354
分享到

Flutter实现心动的动画特效

2024-04-02 19:04:59 354人浏览 薄情痞子
摘要

目录实现动画混入 SingleTickerProviderStateMixin创建动画抽离成小组件完整代码为了追求更好的用户体验,有时候我们需要一个类似心跳一样跳动着的控件来吸引用户

为了追求更好的用户体验,有时候我们需要一个类似心跳一样跳动着的控件来吸引用户的注意力,这是一个小小的优化需求,但是在 Flutter 里动画两件套就像裹脚布一样臭长,所以需要像封装一个 AnimatedWidget,解放生产力。

实现动画

混入 SingleTickerProviderStateMixin

当创建一个 AnimationController 时,需要传递一个vsync参数,存在vsync时会防止动画的UI不在当前屏幕时消耗不必要的资源。 通过混入 SingleTickerProviderStateMixin 。

class _MyHomePageState extends State<MyHomePage>  with SingleTickerProviderStateMixin{}

创建动画

创建一个间隔将近一秒钟的动画控制器:

  late final AnimationController animController;

  @override
  void initState() {
    super.initState();
    animController = AnimationController(
      duration: const Duration(milliseconds: 800),
      vsync: this,
    );
    }

心跳动画是从小变大,再变小,所以需要一个值大小变化的动画:

  late final Animation<double> animation;

  @override
  void initState() {
    super.initState();
    animController = AnimationController(
      duration: const Duration(milliseconds: 800),
      vsync: this,
    );
     animation = Tween<double>(
      begin: 0.9,
      end: 1.05,
    );
    }

心跳是不间断的,所以需要监听动画完成时恢复动画,再继续开始动画:

    animation = Tween<double>(
      begin: 0.9,
      end: 1.05,
    ).animate(animController)
      ..addListener(() {
        setState(() {});
      })
      ..addStatusListener((status) {
        if (status == AnimationStatus.completed) {
          animController.reverse();
        } else if (status == AnimationStatus.dismissed) {
          animController.forward();
        }
      });

使用缩放控件:

TransfORM.scale(
                scale: animation.value,
                child: const FlutterLoGo(
                  size: 80,
                ),
              ),

为了跳动效果,突出跳动动画,把缩回去的时间改短:

   animController = AnimationController(
      reverseDuration: const Duration(milliseconds: 700),
      duration: const Duration(milliseconds: 800),
      vsync: this,
    );

最后别忘了释放资源:

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

抽离成小组件

为了每次用到类似的动画只需引入即可,需要分离动画和显示的组件。新建一个BounceWidget,包含动画,然后可以传入UI组件:

class BounceWidget extends StatefulWidget {
  final Widget child;

  const BounceWidget({
    Key? key,
    required this.child,
  }) : super(key: key);

  @override
  State<BounceWidget> createState() => _BounceWidgetState();
}

继续实现动画:

class _BounceWidgetState extends State<BounceWidget>
    with SingleTickerProviderStateMixin {
  late Animation<double> animation;
  late AnimationController animController;

  @override
  void initState() {
    super.initState();
    animController = AnimationController(
      reverseDuration: const Duration(milliseconds: 700),
      duration: const Duration(milliseconds: 800),
      vsync: this,
    );
    animation = Tween<double>(
      begin: 0.9,
      end: 1.05,
    ).animate(animController)
      ..addListener(() {
        setState(() {});
      })
      ..addStatusListener((status) {
        if (status == AnimationStatus.completed) {
          animController.reverse();
        } else if (status == AnimationStatus.dismissed) {
          animController.forward();
        }
      });
    animController.forward();
  }

  @override
  Widget build(BuildContext context) {
    return Transform.scale(
      scale: animation.value,
      child: widget.child,
    );
  }

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

去引入动画:

  Center(
              child: BounceWidget(
                child: FlutterLogo(
                  size: 80,
                ),
              ),

完整代码

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.only(top: 80, left: 16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: const <Widget>[
            Text(
              "心动的",
              style: TextStyle(
                fontSize: 28,
                color: Colors.black,
              ),
            ),
            Text(
              "感觉",
              style: TextStyle(
                fontSize: 48,
                color: Colors.black,
              ),
            ),
            Center(
              child: BounceWidget(
                child: FlutterLogo(
                  size: 80,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

以上就是Flutter实现心动的动画特效的详细内容,更多关于Flutter动画特效的资料请关注编程网其它相关文章!

--结束END--

本文标题: Flutter实现心动的动画特效

本文链接: https://www.lsjlt.com/news/145344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter实现心动的动画特效
    目录实现动画混入 SingleTickerProviderStateMixin创建动画抽离成小组件完整代码为了追求更好的用户体验,有时候我们需要一个类似心跳一样跳动着的控件来吸引用户...
    99+
    2022-11-13
  • 基于Flutter制作一个心碎动画特效
    目录前言实现步骤1、绘制一个心2、绘制心的裂痕3、加入动画完整代码小结前言 继续动画探索,今天用Flutter制作一个心碎的感觉,灵感来源于今天的股市,哎,心哇凉哇凉的。废话不多说,...
    99+
    2022-11-13
  • 基于Flutter实现爱心三连动画效果
    目录前言Animation 简介AnimationController 简介应用 - 爱心三连总结前言 我们开始 Flutter 动画相关篇章之旅,在应用中通过动效能够给用户带来更愉...
    99+
    2022-11-13
  • 基于Flutter怎么制作一个心碎动画特效
    这篇文章主要介绍了基于Flutter怎么制作一个心碎动画特效的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Flutter怎么制作一个心碎动画特效文章都会有所收获,下面我们一起来看看吧。效果图先上:实现步骤1...
    99+
    2023-06-30
  • 十个利用JavaScript实现的爱心动画特效
    目录3d爱心跳动特效效果展示代码展示线条合成的爱心动画特效效果展示代码展示520爱心背景表白网页动画特效效果展示代码展示爱心签到墙效果展示代码展示粉色的情人节爱心飞出ui特效效果展示...
    99+
    2022-11-13
  • 如何基于Flutter实现爱心三连动画效果
    这篇文章主要为大家展示了“如何基于Flutter实现爱心三连动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何基于Flutter实现爱心三连动画效果”这篇文章吧。前言我们开始 Flutt...
    99+
    2023-06-29
  • Flutter Animation实现缩放和滑动动画效果
    本文实例为大家分享了Flutter Animation实现缩放和滑动动画的具体代码,供大家参考,具体内容如下 Animation对象是Flutter动画库中的一个核心类,它生成指导动...
    99+
    2022-11-13
  • Android Flutter如何实现3D动画效果
    这篇文章主要讲解了“Android Flutter如何实现3D动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter如何实现3D动画效果”吧...
    99+
    2023-06-29
  • iOS实现点赞动画特效
    本文实例为大家分享了iOS实现点赞动画特效的具体代码,供大家参考,具体内容如下 动画的基本使用 动画的实现基本上是基于对View控件和View的layer属性进行操作,对视图进行移动...
    99+
    2022-06-05
    iOS 点赞
  • WPF实现流光动画特效
    一、代码 <Window.Resources> <!--外--> <Storyboard x:Key="Storyboar...
    99+
    2022-11-13
  • 如何实现Flutter动画
    这篇文章主要为大家展示了“如何实现Flutter动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现Flutter动画”这篇文章吧。动画中的三大核心为了能够实现动画效果,必须提供下面的三个...
    99+
    2023-06-04
  • Flutter实现抽屉动画
    这篇会深化View拖拽实例,利用Flutter Animation、插值器以及AnimatedBuilder教大家实现带动画的抽屉效果。先来看效果: 通过构思,我们可以设想到实现抽...
    99+
    2022-11-13
  • Flutter实现不同缩放动画效果详解
    目录需求背景可缩放组件介绍ScaleTransitionSizeTransitionAnimatedSizeAnimatedBuilder小结需求背景 组件缩放可以向着一个方向进行缩...
    99+
    2022-11-13
  • Android Flutter怎么实现仿闲鱼动画效果
    这篇文章主要讲解了“Android Flutter怎么实现仿闲鱼动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter怎么实现仿闲鱼动画效果...
    99+
    2023-07-05
  • Flutter怎么实现不同缩放动画效果
    本篇内容主要讲解“Flutter怎么实现不同缩放动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter怎么实现不同缩放动画效果”吧!需求背景组件缩放可以向着一个方向进行缩放,放大列...
    99+
    2023-07-02
  • HTML5实现的齿轮动画特效代码
    这篇文章主要介绍“HTML5实现的齿轮动画特效代码”,在日常操作中,相信很多人在HTML5实现的齿轮动画特效代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTML5实现的...
    99+
    2022-10-19
  • 怎么用css实现3d动画特效
    小编给大家分享一下怎么用css实现3d动画特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   属性   perspect...
    99+
    2022-10-19
  • Flutter实现牛顿摆动画效果的示例代码
    目录前言实现步骤1、绘制静态效果2、加入动画两个关键点完整源码总结前言 牛顿摆大家应该都不陌生,也叫碰碰球、永动球(理论情况下),那么今天我们用Flutter实现这么一个理论中的永动...
    99+
    2022-11-13
  • Android Flutter实现页面切换转场动画效果
    目录前言Hero 动画过程Hero 基础示例总结前言 写了一篇基础的性能优化的内容,继续我们的动画相关的介绍。今天的主角是英雄 —— Hero 组件。H...
    99+
    2022-06-07
    flutter 动画 Android
  • Android Flutter实现自由落体弹跳动画效果
    目录粒子运动概念如何保持持续运动 创建粒子对象创建粒子控制器初始化粒子创建画板多粒子实现八大行星加速度自由落体弹跳总结粒子运动概念 粒子运动是将对象按照一定物理公式进行的自...
    99+
    2022-11-13
    Android Flutter自由落体弹跳动画 Flutte 弹跳动画 Flutter 动画
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作