iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android利用贝塞尔曲线绘制动画的示例代码
  • 412
分享到

Android利用贝塞尔曲线绘制动画的示例代码

2024-04-02 19:04:59 412人浏览 薄情痞子
摘要

目录彩虹系列弹簧动画复杂立体感动画总结前面我们花了几篇介绍了贝塞尔曲线的原理和绘制贝塞尔曲线,着实让我们见识到了贝塞尔曲线的美。好奇心驱使我想看看贝塞尔曲线动起来会是什么样?本篇就借

前面我们花了几篇介绍了贝塞尔曲线的原理和绘制贝塞尔曲线,着实让我们见识到了贝塞尔曲线的美。好奇心驱使我想看看贝塞尔曲线动起来会是什么样?本篇就借由动画驱动贝塞尔曲线绘制看看动起来的贝塞尔曲线什么效果。

彩虹系列

通过动画控制绘制的结束点,就可以让贝塞尔曲线动起来。例如下面的动图展示的效果,看起来像搭了一个滑滑梯一样。实际上就是用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);
  }
}

我们修改曲线的控制点还可以实现下面的效果,大家有兴趣可以自己尝试一下。

弹簧动画

用多个贝塞尔曲线首尾相接,在垂直方向叠起来就能画出一条弹簧了,然后我们更改弹簧的间距和高度(曲线的数量)就能做出弹簧压下去和弹起来的动画效果了。

这部分的代码如下所示:

@override
void 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);
}

复杂立体感动画

通过多条贝塞尔图形组成的曲线往往会有立体的效果,而立体的效果动起来的时候就会感觉是3D 动画一样,实际上通过贝塞尔曲线是能够绘制出一些3D 效果的动画的,比如下面这个效果,就感觉像在三维空间飞行一样(如果配上背景图移动会更逼真)。这里实际使用了4组贝塞尔曲线来实现,当然实际还可以画一些有趣的图形,比如说画一条鱼。这个源码比较长,就不贴了,有兴趣的可以自行去下载源码(注:本篇之后的 Flutter版本升级到了2.10.3):绘图相关源码。

总结

可以看到,通过动画控制贝赛尔曲线动起来的效果还是挺有趣的。而且,我们还可以根据之前动画相关的篇章做一些更有趣的效果出来。这种玩法可以用在一些特殊的加载动画或是做一些比较酷炫的特效上面,增添 App 的趣味性。

到此这篇关于Android利用贝塞尔曲线绘制动画的示例代码的文章就介绍到这了,更多相关Android贝塞尔曲线内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android利用贝塞尔曲线绘制动画的示例代码

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android利用贝塞尔曲线绘制动画的示例代码
    目录彩虹系列弹簧动画复杂立体感动画总结前面我们花了几篇介绍了贝塞尔曲线的原理和绘制贝塞尔曲线,着实让我们见识到了贝塞尔曲线的美。好奇心驱使我想看看贝塞尔曲线动起来会是什么样?本篇就借...
    99+
    2024-04-02
  • Android怎么利用贝塞尔曲线绘制动画
    本篇内容主要讲解“Android怎么利用贝塞尔曲线绘制动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么利用贝塞尔曲线绘制动画”吧!彩虹系列通过动画控制绘制的结束点,就可以让贝...
    99+
    2023-06-30
  • Android用Canvas绘制贝塞尔曲线
    用Canvas画贝塞尔曲线,要画贝塞尔曲线首先了解贝塞尔曲线: 由于用计算机画图大部分时间是操作鼠标来掌握线条的路径,与手绘的感觉和效果有很大的差别。即使是一位精明的画师能轻松绘出各...
    99+
    2024-04-02
  • Android怎么用Canvas绘制贝塞尔曲线
    这篇文章主要介绍了Android怎么用Canvas绘制贝塞尔曲线的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么用Canvas绘制贝塞尔曲线文章都会有所收获,下面我们一起来看看吧。用Canvas...
    99+
    2023-07-02
  • 怎么用html5的canvas画布绘制贝塞尔曲线
    这篇文章主要介绍“怎么用html5的canvas画布绘制贝塞尔曲线”,在日常操作中,相信很多人在怎么用html5的canvas画布绘制贝塞尔曲线问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • Android使用贝塞尔曲线画心形
    本文实例为大家分享了Android使用贝塞尔曲线画心形的具体代码,供大家参考,具体内容如下 一开始我只是想画个圆,可画着画着就成了心形,那就将错就错 1. 创建一个Activity ...
    99+
    2024-04-02
  • 如何用html5的canvas画布绘制贝塞尔曲线
    这篇“如何用html5的canvas画布绘制贝塞尔曲线”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2024-04-02
  • Android 贝塞尔曲线绘制一个波浪球
    目录前言一、绘制 backgroundColor 文本二、构建 circlePath三、绘制波浪线四、取交集五、绘制 foregroundColor 文本六、添加动画七、使用前言 当...
    99+
    2024-04-02
  • Android怎么自定义View绘制贝塞尔曲线
    本文小编为大家详细介绍“Android怎么自定义View绘制贝塞尔曲线”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么自定义View绘制贝塞尔曲线”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在...
    99+
    2023-07-02
  • 如何使用canvas绘制贝塞尔曲线
    今天就跟大家聊聊有关如何使用canvas绘制贝塞尔曲线,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、二次贝塞尔曲线  quadraticCurv...
    99+
    2024-04-02
  • Android自定义View绘制贝塞尔曲线的方法
    本文实例为大家分享了Android自定义View绘制贝塞尔曲线的具体代码,供大家参考,具体内容如下 在平面内任选 3 个不共线的点,依次用线段连接。 在第一条线段上任选一个点 D。计...
    99+
    2024-04-02
  • Android动效Compose贝塞尔曲线动画规格详解
    目录正文贝塞尔曲线解析动画曲线曲线源码分析总结正文 写Compose动画的时候使用animateXAsState的时候会注意到一个参数——animationS...
    99+
    2022-11-13
    Android Compose贝塞尔曲线 Android Compose动画规格
  • Android通过交互实现贝塞尔曲线的绘制
    目录前言获取触控位置交互绘制实现绘制代码运行效果总结前言 之前几篇我们介绍了贝塞尔曲线的原理、绘制曲线和动效实现,这些都是代码预设好的,如果我们要根据需要自行绘制曲线,就需要使用交互...
    99+
    2024-04-02
  • Android如何使用贝塞尔曲线画心形
    这篇“Android如何使用贝塞尔曲线画心形”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何使用贝塞尔曲线画...
    99+
    2023-07-02
  • 怎么用Android贝塞尔曲线绘制一个波浪球
    本篇内容介绍了“怎么用Android贝塞尔曲线绘制一个波浪球”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如下所示:先来总结下 Wave...
    99+
    2023-06-30
  • AndroidFlutter利用贝塞尔曲线画一个小海豚
    目录前言效果图实现步骤总结前言 贝塞尔曲线的应用填补了计算机绘制与手绘之前的差距,更能表达人想画出的曲线,为了更好的理解万能的贝塞尔曲线,而海豚是我认为在海洋生物中身体曲线最完美的海...
    99+
    2024-04-02
  • Android自定义View绘制贝塞尔曲线实现流程
    目录前言二阶贝塞尔曲线三阶贝塞尔曲线前言 对于Android开发,实现贝塞尔曲线还是比较方便的,有对应的API供你调用。由于一阶贝塞尔曲线就是一条直线,实际没啥多大用处,因此,下面主...
    99+
    2022-11-13
    Android 贝塞尔曲线 Android 贝塞尔曲线实现方法
  • Android贝塞尔曲线实现加入购物车抛物线动画
    本文实例为大家分享了Android贝塞尔曲线实现加入购物车抛物线动画的具体代码,供大家参考,具体内容如下 先上图看效果 步骤: a.确定动画的起终点b.在起终点之间使用二次贝塞...
    99+
    2024-04-02
  • Android自定义View绘制贝塞尔曲线中小红点的方法
    目录前言需求效果图代码主要问题简单画法使用贝塞尔曲线前言 上一篇文章用扇形图练习了一下安卓的多点触控,实现了单指旋转、二指放大、三指移动,四指以上同时按下进行复位的功能。今天这篇文章...
    99+
    2023-02-09
    Android绘制贝塞尔曲线 Android贝塞尔曲线小红点
  • 使用Canvas怎么绘制一个贝赛尔曲线轨迹动画
    本篇文章为大家展示了使用Canvas怎么绘制一个贝赛尔曲线轨迹动画,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。二次贝赛尔曲线   function draw...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作