Android怎么利用贝塞尔曲线绘制动画
发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,本篇内容主要讲解"Android怎么利用贝塞尔曲线绘制动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android怎么利用贝塞尔曲线绘制动画"吧!彩虹
千家信息网最后更新 2024年12月04日Android怎么利用贝塞尔曲线绘制动画
本篇内容主要讲解"Android怎么利用贝塞尔曲线绘制动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android怎么利用贝塞尔曲线绘制动画"吧!
彩虹系列
通过动画控制绘制的结束点,就可以让贝塞尔曲线动起来。例如下面的动图展示的效果,看起来像搭了一个滑滑梯一样。实际上就是用7条贝塞尔曲线实现的,我们使用了 Animation
对象的值来控制绘制的结束点,从而实现了对应的动画效果。
具体源码如下,其中控制绘制结束点就是在动画过程中修改循环的次数,即t <= (100 * animationValue).toInt();
这句代码,其中 animationValue 是动画控制器当前值,范围时从0-1。
class AnimationBezierPainter extends CustomPainter { AnimationBezierPainter({required this.animationValue}); final double animationValue; @override void paint(Canvas canvas, Size size) { final lineWidth = 6.0; paint.strokeWidth = lineWidth; paint.style = PaintingStyle.stroke; final colors = [ Color(0xFFE05100), Color(0xFFF0A060), Color(0xFFE0E000), Color(0xFF10F020), Color(0xFF2080F5), Color(0xFF104FF0), Color(0xFFA040E5), ]; final lineNumber = 7; for (var i = 0; i < lineNumber; ++i) { paint.color = colors[i % colors.length]; _drawAnimatedLines(canvas, paint, size, size.height / 4 + i * lineWidth); } } @override bool shouldRepaint(covariant CustomPainter oldDelegate) { return true; } _drawRainbowLines(Canvas canvas, Paint paint, Size size, yPos) { var yGap = 60.0; var p0 = Offset(0, yPos - yGap / 2); var p1 = Offset(size.width * 2 / 3, yPos - yGap); var p2 = Offset(size.width / 3, yPos + yGap); var p3 = Offset(size.width, yPos + yGap * 1.5); var path = Path(); path.moveTo(p0.dx, p0.dy); for (var t = 1; t <= (100 * animationValue).toInt(); t += 1) { var curvePoint = BezierUtil.get3OrderBezierPoint(p0, p1, p2, p3, t / 100.0); path.lineTo(curvePoint.dx, curvePoint.dy); } canvas.drawPath(path, paint); }}
我们修改曲线的控制点还可以实现下面的效果,大家有兴趣可以自己尝试一下。
弹簧动画
用多个贝塞尔曲线首尾相接,在垂直方向叠起来就能画出一条弹簧了,然后我们更改弹簧的间距和高度(曲线的数量)就能做出弹簧压下去和弹起来的动画效果了。
这部分的代码如下所示:
@overridevoid paint(Canvas canvas, Size size) { var paint = Paint()..color = Colors.black54; final lineWidth = 2.0; paint.strokeWidth = lineWidth; paint.style = PaintingStyle.stroke; final lineNumber = 20; // 弹簧效果 final yGap = 2.0 + 16.0 * animationValue; for (var i = 0; i < (lineNumber * animationValue).toInt(); ++i) { _drawSpiralLines( canvas, paint, size, size.width / 2, size.height - i * yGap, yGap); }}_drawSpiralLines(Canvas canvas, Paint paint, Size size, double xPos, double yPos, double yGap) { final xWidth = 160.0; var p0 = Offset(xPos, yPos); var p1 = Offset(xPos + xWidth / 2 + xWidth / 4, yPos - yGap); var p2 = Offset(xPos + xWidth / 2 - xWidth / 4, yPos - 3 * yGap); var p3 = Offset(xPos, yPos - yGap); var path = Path(); path.moveTo(p0.dx, p0.dy); for (var t = 1; t <= 100; t += 1) { var curvePoint = BezierUtil.get3OrderBezierPoint(p0, p1, p2, p3, t / 100.0); path.lineTo(curvePoint.dx, curvePoint.dy); } canvas.drawPath(path, paint);}
到此,相信大家对"Android怎么利用贝塞尔曲线绘制动画"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
动画
曲线
贝塞
贝塞尔
弹簧
效果
控制
代码
兴趣
内容
实际
就是
面的
学习
实用
更深
多个
实用性
实际上
对象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发部门的职能简述
软件开发工程师简历
数据库备份表的语录
万马互联网科技
csgo怎么更改韩国服务器
苏州戴尔服务器报价
浦东新区网络技术开发怎么样
如何挖掘软件开发市场
株洲市公安局网络安全检查
oracle数据库导数据
如何介绍一个软件开发项目
网络安全为人民靠人民作文
微忙互联网科技有限公司
软件开发摸底考试
中信银行软件开发测试笔试
河南鸠鸠互联网科技迁址
沈家门住宿软件开发
网络安全经费多少万
软件开发基本硬件环境指
西安软件开发哪个最好
sql mdb数据库
sql服务器和数据库用户区别
数据库系统工程师笔试
计算机网络技术考什么好
认知无线网络安全
服务器上的图片不能被访问吗
lol广东服务器云空间
中小学生家庭网络安全教育
硬件及网络技术是什么
在单元格里快速录入数据库