返回顶部
首页 > 资讯 > 移动开发 >AndroidFlutter制作交错动画的示例代码
  • 933
分享到

AndroidFlutter制作交错动画的示例代码

2024-04-02 19:04:59 933人浏览 安东尼
摘要

目录前言动画解析编码实现总结前言 之前一篇我们讲了 Flutter组合动画实现的方式 —— 交错动画。借助 GIF 和绘图技巧是可以做到类似 GIF 那种效果

前言

之前一篇我们讲了 Flutter组合动画实现的方式 —— 交错动画。借助 GIF 和绘图技巧是可以做到类似 GIF 那种效果的。本篇我们来一个应用实例,我们让轮子在草地滚动着前进,而且还能粘上“绿色的草”,运行效果如下动画所示。

图片

动画解析

上面实现的效果实际上由三个动画组成:

  • 轮子前进的动画
  • 轮子滚动
  • 轮子的边缘颜色渐变(由黑色变成绿色)

这三个动画是同时进行的,因此需要使用到交错动画,即使用一个 AnimationController来控制三个 Tween 对象实现上述的动画组合。

编码实现

首先是轮子组件的定义,为了让轮子转动的效果能够看到,我们给轮子填充了线性的渐变色,然后轮子的尺寸、旋转速度(time)和边框颜色由上级组件来控制。整个实现很简单,就是一个加了装饰的 Container 而已。

class Wheel extends StatelessWidget {
  final double size;
  final Color color;
  final double time;
  const Wheel({
    Key? key,
    required this.size,
    required this.time,
    required this.color,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: size,
      height: size,
      transfORM: Matrix4.identity()..rotateZ(2 * pi * time),
      transformAlignment: Alignment.center,
      decoration: BoxDecoration(
        border: Border.all(color: color, width: 10.0),
        borderRadius: BorderRadius.circular(size / 2),
        gradient: LinearGradient(
          colors: [
            Colors.white,
            Colors.orange[100]!,
            Colors.orange[400]!,
          ],
        ),
      ),
    );
  }
}

然后是整个页面布局,整个页面布局其实就是一个 Stack,然后底部是绿色的 Container再加两个轮子,都是使用 Positioned 来确定各自的位置。然后就是通过受控的Tween 对象控制轮子的旋转速度,轮子外边沿颜色和移动的距离,代码如下,其中轮子移动距离通过控制边距实现。

Widget build(BuildContext context) {
  final bottomHeight = MediaQuery.of(context).size.height / 3;
  return Scaffold(
    appBar: AppBar(
      title: const Text('交错动画'),
    ),
    body: Stack(children: [
      Positioned(
        child: Container(
          width: double.infinity,
          height: bottomHeight,
          color: Colors.green[400],
        ),
        bottom: 0,
        left: 0,
        right: 0,
      ),
      Positioned(
          child: Wheel(
            size: wheelSize,
            color: _color.value!,
            time: _time.value,
          ),
          left: _offset.value * MediaQuery.of(context).size.width,
          bottom: bottomHeight),
      Positioned(
          child: Wheel(
            size: wheelSize,
            color: _color.value!,
            time: -_time.value,
          ),
          right: _offset.value * MediaQuery.of(context).size.width,
          bottom: bottomHeight)
    ]),
    floatingActionButton: FloatingActionButton(
      child: Icon(Icons.play_arrow),
      onPressed: () {
        if (_controller.isCompleted) {
          _controller.reverse();
        } else if (!_controller.isAnimating) {
          _controller.forward();
        }
      },
    ),
  );
}

最后就是构建受AnimationController 控制的 Tween 对象了,这个在Flutter 做出 GIF 动画效果已经介绍过了,代码如下:

late AnimationController _controller;
late Animation<double> _time;
late Animation<double> _offset;
late Animation<Color?> _color;

final wheelSize = 80.0;

@override
void initState() {
  _controller =
      AnimationController(duration: Duration(seconds: 4), vsync: this)
        ..addListener(() {
          setState(() {});
        });

  _time = Tween<double>(begin: 0, end: 8.0).animate(
    CurvedAnimation(
      parent: _controller,
      curve: Interval(
        0.0,
        1.0,
        curve: Curves.linear,
      ),
    ),
  );
  _offset = Tween<double>(begin: 0, end: 1.0).animate(
    CurvedAnimation(
      parent: _controller,
      curve: Interval(
        0.0,
        1.0,
        curve: Curves.easeInCubic,
      ),
    ),
  );
  _color = ColorTween(begin: Colors.black87, end: Colors.green).animate(
    CurvedAnimation(
      parent: _controller,
      curve: Interval(
        0.0,
        0.8,
        curve: Curves.easeIn,
      ),
    ),
  );
  super.initState();
}

就这样,一对奔向对方的轮子动画效果就完成了!

总结

交错动画实际上可以实现非常有创意的动效,只是这样会需要很高的绘图技巧,比如使用 CustomPaint 来做。接下来的几篇我们来介绍一下 CustomPaint相关的内容。

以上就是Android Flutter制作交错动画的示例代码的详细内容,更多关于Android Flutter交错动画的资料请关注编程网其它相关文章!

--结束END--

本文标题: AndroidFlutter制作交错动画的示例代码

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

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

猜你喜欢
  • AndroidFlutter制作交错动画的示例代码
    目录前言动画解析编码实现总结前言 之前一篇我们讲了 Flutter组合动画实现的方式 —— 交错动画。借助 GIF 和绘图技巧是可以做到类似 GIF 那种效果...
    99+
    2024-04-02
  • Android绘制平移动画的示例代码
    目录1、具体操作步骤2、具体实施创建ImageView创建ObjectAnimator对象3、具体实例activity_main.xmlMainActivity.java1、具体操作...
    99+
    2024-04-02
  • Java绘制迷宫动画并显示的示例代码
    一次性全部绘制出来 实现代码 import java.awt.*; public class AlgoVisualizer { private static int...
    99+
    2024-04-02
  • AndroidFlutter实现点赞效果的示例代码
    目录前言绘制小手完整源码前言 点赞这个动作不得不说在社交、短视频等App中实在是太常见了,当用户手指按下去的那一刻,给用户一个好的反馈效果也是非常重要的,这样用户点起赞来才会有一种强...
    99+
    2024-04-02
  • Android绘制平移动画的示例代码怎么编写
    今天就跟大家聊聊有关Android绘制平移动画的示例代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、具体操作步骤创建ImageView对象创建ObjectAnimato...
    99+
    2023-06-26
  • AndroidFlutter实现上拉加载组件的示例代码
    前言 在此之前对列表下拉刷新做了调整方案,具体介绍可以阅读下拉刷新组件交互调整。既然列表有下拉刷新外当然还有上拉加载更多操作了,本次就来介绍如何为列表增加上拉加载更多的交互实现。 实...
    99+
    2024-04-02
  • Android利用贝塞尔曲线绘制动画的示例代码
    目录彩虹系列弹簧动画复杂立体感动画总结前面我们花了几篇介绍了贝塞尔曲线的原理和绘制贝塞尔曲线,着实让我们见识到了贝塞尔曲线的美。好奇心驱使我想看看贝塞尔曲线动起来会是什么样?本篇就借...
    99+
    2024-04-02
  • Python制作春联的示例代码
    目录1. 前言2. 代码中需要导入的模块3. 下载字模4. 下载龙凤呈祥背景底图5. 生成春联6. 测试样例6.1 普天同庆 欢度春节6.2 年尽岁除岁月如歌 冬去春来春光似画6.3...
    99+
    2024-04-02
  • python绘制字符画视频的示例代码
    目录 读取视频转为字符动画已经11月了,不知道还有没有人看华强买瓜。。。要把华强卖瓜做成字符视频,总共分为三步 读取视频 把每一帧转为字符画 把字...
    99+
    2024-04-02
  • 在Flutter中制作翻转卡片动画的完整实例代码
    目录前言使用自写代码预览完整代码使用第三个插件编码结论前言 本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少...
    99+
    2024-04-02
  • 利用Pygame制作简单动画的示例详解
    目录前言计时器绘制精灵加载精灵完整代码前言 实现一个帧动画,使用的一个图,根据不同的时间显示不同的图。 使用的就是如下所示的一张图,宽度780 * 300 ,使用加载图片 260 ...
    99+
    2024-04-02
  • WPF实现好看的Loading动画的示例代码
    实现思路 框架使用大于等于.NET40; Visual Studio 2022; 项目使用 MIT 开源许可协议; 老板觉得公司系统等待动画转圈太简单,所以需要做...
    99+
    2022-11-13
    WPF Loading动画 WPF Loading
  • android判断动画已结束示例代码
    添加一个动画效果 发现动画没执行完 就直接跳转或者finish掉 添加动画监听事件即可,代码如下: player.startAnimation(anim); anim.se...
    99+
    2022-06-06
    示例 动画 Android
  • 基于WPF实现3D画廊动画效果的示例代码
    接下来想做一个图廊,所以并没有必要用立方体,只需做一些“墙壁”就行了。 而在一个平面上建起另一个矩形的平面,实则非常容易,只需输入墙角的两点和高度就可以了,这...
    99+
    2023-02-28
    WPF实现3D画廊效果 WPF 3D画廊 WPF 3D
  • AndroidFlutter实现视频上滑翻页效果的示例代码
    目录前言PageView 组件介绍使用示例PageController 应用前言 我们在短视频应用中经常会看到不停上滑浏览下一条视频的沉浸式交互效果,这种交互能够让用户不停地翻页,直...
    99+
    2022-11-13
    Android Flutter上滑翻页效果 Flutter 上滑翻页 Android 翻页
  • JavaScript制作轮播图的的示例代码
    这篇文章主要介绍了JavaScript制作轮播图的的示例代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下<!DOCTYP...
    99+
    2024-04-02
  • Vue 动画效果、过渡效果的示例代码
    目录动画效果过渡效果单个元素多个元素Animate.css总结todolist 增加动画效果动画效果 新建 Test.vue <template> <div&...
    99+
    2024-04-02
  • vue实现数字变换动画的示例代码
    最近开发项目的时候有个屏保的部分,就几个数字觉得过于单调,索性加点特效在里边,UI图数字部分如下: emmm。所以加了个数字动态变动的效果 一开始直接在网上copy了一份。但是部分...
    99+
    2024-04-02
  • JavaScript实现扯网动画效果的示例代码
    目录演示技术栈源码css控制js部分演示 技术栈 JavaScript prototype(原型对象): 所有的 JavaScript 对象都会从一个 prototype(原型对象...
    99+
    2024-04-02
  • PythonMatplotlib绘制动画的代码详解
    目录matplotlib 动画人口出生率男女人口总数雨滴matplotlib 动画 我们想制作一个动画,其中正弦和余弦函数在屏幕上逐步绘制。首先需要告诉matplotlib我们想要制...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作