基于Flutter怎么制作一个心碎动画特效
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章主要介绍了基于Flutter怎么制作一个心碎动画特效的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Flutter怎么制作一个心碎动画特效文章都会有所收获,下面
千家信息网最后更新 2025年02月16日基于Flutter怎么制作一个心碎动画特效
这篇文章主要介绍了基于Flutter怎么制作一个心碎动画特效的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Flutter怎么制作一个心碎动画特效文章都会有所收获,下面我们一起来看看吧。
效果图先上:
实现步骤
1、绘制一个心
首先我们使用两段三阶贝塞尔曲线制作一个心型,这里因为需要实现心碎的效果,所以我们需要将心的两段用两段路径path
进行绘制出来,效果:
绘制代码:
canvas.translate(size.width / 2, size.height / 2);Paint paint = Paint();paint ..style = PaintingStyle.stroke ..strokeWidth = 2 ..color = Colors.black87;Path path = Path();path.moveTo(0, 0);path.cubicTo(-200, -80, -60, -240, 0, -140);path.close();Path path3 = Path();canvas.save();canvas.drawPath( path, paint ..color = Colors.red ..style = PaintingStyle.stroke);canvas.restore();path3.cubicTo(200, -80, 60, -240, 0, -140);path3.close();canvas.drawPath( path3, paint..color = Colors.black87);
2、绘制心的裂痕
我们看到心确实分成两半了,但是中间还缺少裂痕,接下来我们就绘制心碎的裂痕,也很简单,在两段路径path
闭合前进行绘制线,效果:
绘制代码:
path.relativeLineTo(-10, 30);path.relativeLineTo(20, 5);path.relativeLineTo(-20, 30);path.relativeLineTo(20, 20);path.relativeLineTo(-10, 20);path.relativeLineTo(10, 10);path3.relativeLineTo(-10, 30);path3.relativeLineTo(20, 5);path3.relativeLineTo(-20, 30);path3.relativeLineTo(20, 20);path3.relativeLineTo(-10, 20);path3.relativeLineTo(10, 10);
OK,我们已经看到心已经有了裂痕,如何心碎,只需将画布进行翻转一定角度即可,这里我们将画布翻转45°,看下效果:
左边:
右边:
3、加入动画
已经有心碎的感觉了,接下来加入动画元素让心碎的过程动起来。
思路: 我们可以想一下,心碎的过程是什么样子,心的颜色慢慢变灰,心然后慢慢裂开,下方的动画运动曲线看起来更符合心碎的过程,里面有不舍,不甘,但最后心还是慢慢的碎了。
我们把画笔进行填充将这个动画加入进来看下最终效果。
是不是心碎了一地。
知识点: 这里我们需要找到红色和灰色的RGB色值,通过Color.fromRGBO(r, g, b, opacity)
方法赋值颜色的色值。然后通过动画值改变RGB的值即可。 这里我使用的色值是:
红色:Color.fromRGBO(255, 0, 0, 1)
灰色:Color.fromRGBO(169, 169, 169, 1)
完整代码
class XinSui extends StatefulWidget { const XinSui({Key? key}) : super(key: key); @override _XinSuiState createState() => _XinSuiState();}class _XinSuiState extends Statewith SingleTickerProviderStateMixin { late AnimationController _controller = AnimationController(vsync: this, duration: Duration(milliseconds: 4000)) ..repeat(); late CurvedAnimation cure = CurvedAnimation(parent: _controller, curve: Curves.bounceInOut); late Animation animation = Tween (begin: 0.0, end: 1.0).animate(cure); @override Widget build(BuildContext context) { return Container( child: CustomPaint( size: Size(double.infinity, double.infinity), painter: _XinSuiPainter(animation), ), ); } @override void dispose() { _controller.dispose(); super.dispose(); }}class _XinSuiPainter extends CustomPainter { Animation animation; _XinSuiPainter(this.animation) : super(repaint: animation); @override void paint(Canvas canvas, Size size) { canvas.translate(size.width / 2, size.height / 2); Paint paint = Paint(); paint ..style = PaintingStyle.stroke ..strokeWidth = 2 ..color = Colors.black87; Path path = Path(); path.moveTo(0, 0); path.cubicTo(-200, -80, -60, -240, 0, -140); path.relativeLineTo(-10, 30); path.relativeLineTo(20, 5); path.relativeLineTo(-20, 30); path.relativeLineTo(20, 20); path.relativeLineTo(-10, 20); path.relativeLineTo(10, 10); path.close(); Path path3 = Path(); canvas.save(); canvas.rotate(-pi / 4 * animation.value); canvas.drawPath( path, paint ..color = Colors.red ..color = Color.fromRGBO( 255 - (86 * animation.value).toInt(), (animation.value * 169).toInt(), (animation.value * 169).toInt(), 1) ..style = PaintingStyle.fill); canvas.restore(); path3.cubicTo(200, -80, 60, -240, 0, -140); path3.relativeLineTo(-10, 30); path3.relativeLineTo(20, 5); path3.relativeLineTo(-20, 30); path3.relativeLineTo(20, 20); path3.relativeLineTo(-10, 20); path3.relativeLineTo(10, 10); path3.close(); canvas.rotate(pi / 4 * animation.value); canvas.drawPath( path3,paint); } @override bool shouldRepaint(covariant _XinSuiPainter oldDelegate) { return oldDelegate.animation != animation; }}
关于"基于Flutter怎么制作一个心碎动画特效"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"基于Flutter怎么制作一个心碎动画特效"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
动画
效果
制作
特效
知识
裂痕
代码
过程
接下来
内容
曲线
灰色
画布
篇文章
红色
路径
颜色
价值
元素
只需
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
靠谱网络安全运维找哪家
mdb数据库double
影响软件开发成本因素有哪些
关于网络安全的报道
杭州管理软件开发平台
服务器防护工作
手机破解软件开发平台
标准网络技术推广系统
数据库连不上怎么跳过
黑河软件开发平台
数字文化创意软件开发
黄河科技学院互联网大赛
蚌埠软件开发助理招聘信息
网络安全宣传和防电信诈骗
实惠的销售管理软件开发管理
北京京东总部软件开发
数据库619
数据库中表新增列
天津hp服务器阵列卡电池性能
网络安全主题绘画竖版
关于网络安全的报道
厦门神搜网络技术有限公司
2003系统文件服务器备份
深圳哪家网络安全培训比较好
单机游戏连接数据库
数据库备份后可以查询
泗阳网络技术联系方式
网络安全法 至少 年进行
广州黑洞网络技术有限公司
做cdn节点用vps还是服务器