Flutter 水波纹动画效果实现
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控制;动画结束时生成新的圆形动画,同时销毁旧的圆形动画,达到循环不熄的效果。
- 首先初始化生成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();}});}
- 创建动画控制器,每次在动画结束时,生成新的动画
///创建蓝牙检索动画控制器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 水波纹动画效果实现相关推荐
- CSS 实现图片旋转和水波纹动画效果
CSS 实现图片旋转和水波纹动画效果 背景 通过 CSS 动画实现图片旋转和水波纹动画效果,并做成 Vue 组件,方便以后复用. 代码 <template><view class=& ...
- vue 鼠标点击特效动画(css3动画),水波纹动画效果
效果展示 思路要点 通过向数组 waves push操作插入水波纹相关数据,使用 vue v-for 动态更新 waves 生成水波纹数据 水波纹使用fixed定位通过点击事件的 clientX 和 ...
- 微信小程序水波纹动画效果
水波波动效果实现,复制查看效果 wxml <view class="circle"><view class="positionNumber"& ...
- android曲线水波纹录音动画,Android-贝塞尔曲线实现水波纹动画
Android 系统api提供了quadTo和rQuadTo实现二阶贝塞尔曲线,三阶贝塞尔曲线在这不做阐述,只不过是两个控制点. 效果图 首先看张二阶贝赛尔的曲线 Path path = new Pa ...
- html5 水效果图,HTML5 canvas水波纹动画插件waterrippleeffect.js
插件描述:这是一款HTML5 canvas水波纹动画特效.该水波纹动画以插件的形式进行编写,可以是纯js插件,或通过jquery插件来进行调用.它能够制作出逼真的水波纹动画效果 使用方法 在页面中引入 ...
- android水平波浪扩散动画,Android实现水波纹扩散效果
本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 ?澹∶挥型计??跃湍昧诵"泊?媪恕?/p> 先看一下如何使用这个View. andro ...
- Android自定义水波纹动画Layout
Android自定义水波纹动画Layout 源码是双11的时候就写好了,但是我觉得当天发不太好,所以推迟了几天,没想到过了双11女友就变成了前女友,桑心.唉不说了,来看看代码吧. 展示效果 Hi前辈 ...
- Android百度地图水波纹动画,高德地图实现水波纹扩散
功能修改,要求在地图上有个类似雷达的水波纹扩散的动画,通过大半天时间的研究.查找,终于完成了这项任务,话不多说,下面直接贴出代码,供有需要的兄弟参考, 1.首先在地图上画个圆如下图 2.新建个JS / ...
- Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)
很久很久没有写博客了,说来也有点惭愧.正好最近整理自己的项目工程目录,看到一些值得分享的控件,准备在之后的几篇博客中准备把它们陆续搬运上来. 这篇博客准备整理一下Android Material De ...
最新文章
- P2P之UDP穿透NAT的原理
- PHP与MySQL通讯那点事
- python名称由来_Python的由来与使用介绍
- 一个WEB网站高并发量的解决方案
- Boost:boost::bimaps::multiset_of的测试程序
- 《Python编程从入门到实践》学习笔记8(第9章:类)
- 朴素贝叶斯算法-分类算法
- fstream的使用(一)
- 什么才是真正的架构设计?
- 我的世界网易版显示dns服务器错误怎么弄,手机显示DNS异常怎么办
- [oracle] Instant Client 即时客户端
- ROS笔记(38) Xbox360手柄控制移动
- 【加法器】——模拟电路设计简单的二进制数加法器
- 极光一键登录集成手册 | Android
- kettle MongoDB数据迁移至Hbase
- 不看你就亏了。。。。
- 静态,关键字:static 接口,IUSB , API 接口关键字:interface
- 服务器2003光盘修复,将Windows安装到光盘上 修复系统故障简单轻松
- 工具开发|键盘记录工具原理及代码实现
- Linux 文件与目录的管理
热门文章
- JAVA字符流InputStreamReader读取文本
- 2019年技术盘点容器篇(一):听UCloud谈风生水起的K8S | 程序员硬核评测
- SAP FI 系列 001:财务会计组织架构
- SAP汇率维护、财务会计/物料管理自动过账配置
- 机器人科学家们,会带领我们进入美剧里描绘的「西部世界」么?
- 一个合格的程序员也是一名合格的侦探---Debug篇
- 阿里云oss服务操作文件,上传下载生成链接删除通知等
- 数据结构之二叉搜索树删除节点分析
- 【Linux】ubuntu或linux网卡配置/etc/network/interfaces【转】
- django数据库迁移需注意的问题