Flutter 水波纹动画效果实现

  • 1. 先上效果图:
  • 2. 实现
    • 2.1 尺寸渐变结合透明度渐变
    • 2.2 多个基本动画效果叠加
  • 3. 总结

1. 先上效果图:

2. 实现

我们将该动画拆成三部分来实现就比较容易了,分别是尺寸大小渐变动画、透明度渐变动画和叠加组合动画。
尺寸变换数值由补间动画Tween填补,辅以线性变换;这里圆形的大小变化我设置的是50~290范围,当然你可以设置其他范围:

var animation = Tween(begin: 50.0, end: 290.0).animate(CurvedAnimation(parent: controller, curve: Curves.linear));

使用 AnimationController 控制动画:

var controller = AnimationController(duration: const Duration(milliseconds: 4000), vsync: this);

2.1 尺寸渐变结合透明度渐变

尺寸大小变化和透明度值变化遵循上面创建的同一个补间动画,圆形效果使用ClipOval控件进行裁剪:

      AnimatedBuilder(animation: controller,builder: (BuildContext context, Widget? child) {return Opacity(//透明度变化opacity: 1.0 - ((animation.value - 50.0) / 240.0),child: ClipOval(child: Container(width: animation.value,height: animation.value,color: const Color(0xff9fbaff),),),);});

到这里已经完成了基本的单个圆形变化效果,下面实现多个叠加效果。

2.2 多个基本动画效果叠加

水波纹是一个新旧动画不断交替的效果,始终显示5个圆,5个圆顺序间隔开来,间隔时间相同;每个圆形动画由一个controller控制;动画结束时生成新的圆形动画,同时销毁旧的圆形动画,达到循环不熄的效果。

  1. 首先初始化生成5个初始圆:使用计时器一次间隔1秒
  ///初始化蓝牙检索动画,依次添加5个缩放动画,形成水波纹动画效果void _startAnimation() {//动画启动前确保_children控件总数为0_children.clear();int count = 0;//添加第一个圆形缩放动画_addSearchAnimation(true);//以后每隔1秒,再次添加一个缩放动画,总共添加4个_searchBluetoothTimer =Timer.periodic(const Duration(milliseconds: 1000), (timer) {if (!mounted) return;_addSearchAnimation(true);count++;if (count >= 4) {timer.cancel();}});}
  1. 创建动画控制器,每次在动画结束时,生成新的动画
///创建蓝牙检索动画控制器AnimationController _createController() {var controller = AnimationController(duration: const Duration(milliseconds: 4000), vsync: this);controller.addStatusListener((status) {Log.e("tag", status);if (status == AnimationStatus.completed) {controller.dispose();if (_controllers.contains(controller)) {_controllers.remove(controller);}//每次动画控件结束时,添加新的控件,保持动画的持续性if (!_disposeSearchBluetoothAnimation) _addSearchAnimation(false);}});return controller;}

3. 总结

到这里已经完成了整个实现步骤,完整代码链接https://github.com/crazylii/WaterRipples。

Flutter 水波纹动画效果实现相关推荐

  1. CSS 实现图片旋转和水波纹动画效果

    CSS 实现图片旋转和水波纹动画效果 背景 通过 CSS 动画实现图片旋转和水波纹动画效果,并做成 Vue 组件,方便以后复用. 代码 <template><view class=& ...

  2. vue 鼠标点击特效动画(css3动画),水波纹动画效果

    效果展示 思路要点 通过向数组 waves push操作插入水波纹相关数据,使用 vue v-for 动态更新 waves 生成水波纹数据 水波纹使用fixed定位通过点击事件的 clientX 和 ...

  3. 微信小程序水波纹动画效果

    水波波动效果实现,复制查看效果 wxml <view class="circle"><view class="positionNumber"& ...

  4. android曲线水波纹录音动画,Android-贝塞尔曲线实现水波纹动画

    Android 系统api提供了quadTo和rQuadTo实现二阶贝塞尔曲线,三阶贝塞尔曲线在这不做阐述,只不过是两个控制点. 效果图 首先看张二阶贝赛尔的曲线 Path path = new Pa ...

  5. html5 水效果图,HTML5 canvas水波纹动画插件waterrippleeffect.js

    插件描述:这是一款HTML5 canvas水波纹动画特效.该水波纹动画以插件的形式进行编写,可以是纯js插件,或通过jquery插件来进行调用.它能够制作出逼真的水波纹动画效果 使用方法 在页面中引入 ...

  6. android水平波浪扩散动画,Android实现水波纹扩散效果

    本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 ?澹∶挥型计??跃湍昧诵"泊?媪恕?/p> 先看一下如何使用这个View. andro ...

  7. Android自定义水波纹动画Layout

    Android自定义水波纹动画Layout 源码是双11的时候就写好了,但是我觉得当天发不太好,所以推迟了几天,没想到过了双11女友就变成了前女友,桑心.唉不说了,来看看代码吧. 展示效果 Hi前辈 ...

  8. Android百度地图水波纹动画,高德地图实现水波纹扩散

    功能修改,要求在地图上有个类似雷达的水波纹扩散的动画,通过大半天时间的研究.查找,终于完成了这项任务,话不多说,下面直接贴出代码,供有需要的兄弟参考, 1.首先在地图上画个圆如下图 2.新建个JS / ...

  9. Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)

    很久很久没有写博客了,说来也有点惭愧.正好最近整理自己的项目工程目录,看到一些值得分享的控件,准备在之后的几篇博客中准备把它们陆续搬运上来. 这篇博客准备整理一下Android Material De ...

最新文章

  1. P2P之UDP穿透NAT的原理
  2. PHP与MySQL通讯那点事
  3. python名称由来_Python的由来与使用介绍
  4. 一个WEB网站高并发量的解决方案
  5. Boost:boost::bimaps::multiset_of的测试程序
  6. 《Python编程从入门到实践》学习笔记8(第9章:类)
  7. 朴素贝叶斯算法-分类算法
  8. fstream的使用(一)
  9. 什么才是真正的架构设计?
  10. 我的世界网易版显示dns服务器错误怎么弄,手机显示DNS异常怎么办
  11. [oracle] Instant Client 即时客户端
  12. ROS笔记(38) Xbox360手柄控制移动
  13. 【加法器】——模拟电路设计简单的二进制数加法器
  14. 极光一键登录集成手册 | Android
  15. kettle MongoDB数据迁移至Hbase
  16. 不看你就亏了。。。。
  17. 静态,关键字:static 接口,IUSB , API 接口关键字:interface
  18. 服务器2003光盘修复,将Windows安装到光盘上 修复系统故障简单轻松
  19. 工具开发|键盘记录工具原理及代码实现
  20. Linux 文件与目录的管理

热门文章

  1. JAVA字符流InputStreamReader读取文本
  2. 2019年技术盘点容器篇(一):听UCloud谈风生水起的K8S | 程序员硬核评测
  3. SAP FI 系列 001:财务会计组织架构
  4. SAP汇率维护、财务会计/物料管理自动过账配置
  5. 机器人科学家们,会带领我们进入美剧里描绘的「西部世界」么?
  6. 一个合格的程序员也是一名合格的侦探---Debug篇
  7. 阿里云oss服务操作文件,上传下载生成链接删除通知等
  8. 数据结构之二叉搜索树删除节点分析
  9. 【Linux】ubuntu或linux网卡配置/etc/network/interfaces【转】
  10. django数据库迁移需注意的问题