【圣诞节特辑】会呼吸的玫瑰爱心代码 -李峋爱心续 动画演示思路 代码开源 一起浪漫吧

news2024/11/20 17:39:01

源码下载地址:会呼吸、带有玫瑰花的爱心告白程序-Java文档类资源-CSDN下载

粉丝可直接私信我领取。

前言

之前有部电视剧《点燃我温暖你》没火,但是其中李峋的爱心代码却在程序圈超级火,这圣诞节快到了了,给大家来一波爱心代码的教学,同时弥补一下Java语言上一波的缺失。最终希望大家能在圣诞节该浪漫的浪漫、该脱单的脱单,加油兄弟!同时我也把实现思路通过动画给大家说清楚,期望各个语言的大佬都能一起开发出来,用心浪漫2022圣诞节!(开发了可以在评论区留个言哦~)

特别说明:勇哥的粉丝,可以评论区或私信留言给我,我直接把你想写的话和名字,直接给你打包好!

解释一下,创作思路及寓意:

  • 程序以信封的方式,可以增加浪漫与惊喜的仪式感!

  • 心的形状+玫瑰花的形状,双重美丽,不怕你的她不喜欢!

  • 心跳+呼吸灯的效果,含义:你的心围她而动的深刻含义!

  • 内部心不停转动的效果,含义:你的心围她而动的深刻含义!(双重强调更具浪漫)

重点学习或必要技术

  • 对于不规则图形的绘制示例:从本文中将学习到java中GeneralPath绘制不规则图形的高级应用。

  • 对于不规则图形的填充示例:从本文中将学习到不规则图形的,特别是射线渐变填充等高级应用。

  • 对于不规则图形的动画示例:从本文中将学习到图形平移、旋转、以及多层次的平移等高级应用。

心的轮廓思路及实现

绘制好基本轮廓之后,填充的颜色、特效等才不会溢出轮廓,因此我们第一步需要画好重要的轮廓线,实现思路如下:

通过二次曲线(Java中是QuadCurve2D)来画出轮廓线,轮廓线分为以下九段:

  • 第一段为心的最上左边

  • 第二段为心的最上右边

  • 第三段心的最下,有点幅度让心看起来中心点平滑一些;注意上面线段比下面线段长,有主次感;

  • 第四段为右上角

  • 第五段为右边

  • 第六段为右下角

  • 第七段为左下角,与第六段对称

  • 第八段为左边,与第五段对称

  • 第九段为左上角,与第四段对称

PS:有人可能不明白,为什么要画这么复杂?勇哥给解释一下,这样画,有9个点和9个线段,蕴含长长久久的意思!懂了吧~

来看一下动画演示的效果吧:

9个点9个线段,蕴含长长久久

参考代码:

GeneralPath generalPath = new GeneralPath();
// 左边
g2d.setColor(bgColor);
generalPath.moveTo(getWidth()/2-6,getHeight()*3/10);
generalPath.quadTo(getWidth()/2,getHeight()*3/10+5,getWidth()/2+6,getHeight()*3/10);// 上中
generalPath.quadTo(getWidth()*5/8,getHeight()*2/10,getWidth()*3/4,getHeight()*2/10);// 右上
generalPath.quadTo(getWidth(),getHeight()*2/10+10,getWidth()-5,getHeight()*2/5);
generalPath.quadTo(getWidth(),getHeight()*3/5,getWidth()/2+5,getHeight()*4/5);
generalPath.quadTo(getWidth()/2,getHeight()*4/5+3,getWidth()/2-5,getHeight()*4/5);
generalPath.quadTo(10,getHeight()*3/5,5,getHeight()*2/5);
generalPath.quadTo(0,getHeight()*2/10,getWidth()*1/4,getHeight()*2/10);
generalPath.quadTo(getWidth()*3/8,getHeight()*2/10,getWidth()/2-6,getHeight()*3/10);

玫瑰心思路及实现

有了轮廓就可以实现玫瑰花的效果了,思路就两步如下:

  • 纯色填充不好看,使用射线填充,纯色(#ffffff)到红色(#ff0000)的射线渐变

  • 复制9个渐变好的心,按照中心点重叠起来玫瑰花的效果

PS:这个地方又是9,看得出勇哥的用心设计了吧~

动画演示一番,希望得的点赞:

9个心,蕴含长长久久

参考实现代码:

for (int i = 0; i < 9; i++) {
    AffineTransform transform = g2d.getTransform();
    transform.scale(0.6d, 0.6d);
    transform.translate(getWidth() *0.34, getHeight()*0.34);
    if(i>3) {
        transform.rotate(theta % 360, getWidth() / 2, getHeight() / 2);
    }
    g2d.setTransform(transform);
    g2d.draw(generalPath);
    g2d.setColor(Color.RED);
    Color[] colors = { Color.RED, Color.WHITE, Color.RED };
    float[] dist = {0.13f, 0.55f, 1.0f };
    Point2D center = new Point2D.Float(0.5f * getWidth(), 0.5f * getHeight()-10);

    RadialGradientPaint p = new RadialGradientPaint(center, 0.5f * getWidth()*per, dist, colors);
    g2d.setPaint(p);
    g2d.fill(generalPath);
}

呼吸效果&内部心旋转思路及实现

呼吸效果,可以通过控制射线的大小比例来控制:

  • 定义per变量,等于1时,表示上一步的渐变效果,1.4时表示白色圆圈扩大1.4倍,反正缩小

  • 通过线程每100ms修改一下缩放比例,步长为0.1

内部心旋转思路:

  • 定义theta变量,表示内部心旋转的角度

  • 通过线程每100ms修改一下角度值,步长为2度

double theta = 0;// 选择的角度
float per = 1;// 镜像的大小比例
boolean isAdd = true;// 镜像大小是+计算还是-计算

@Override
public void run() {
    while (true){
        try {
            theta += 2;
            if (isAdd) {
                per += 0.1;
                if (per > 1.3) {
                    isAdd = false;
                }
            } else {
                per -= 0.1;
                if (per < 0.6) {
                    isAdd = true;
                }
            }
            repaint();
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }
}

再次欣赏一下吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非零基础自学Golang 第1章 走进Go 1.2 Go语言官方文档 1.3 学好Go 的建议

非零基础自学Golang 文章目录非零基础自学Golang第1章 走进Go1.2 Go语言官方文档1.3 学好Go 的建议1.3.1 了解语言特性及自身需求1.3.2 动手写代码1.3.3 参与项目1.3.4 阅读英文文档第1章 走进Go 1.2 Go语言官方文档 Go语言官方文档网址&#xff1a;https://go.dev/doc/。 官…

系统迁移的重点步骤及注意事项

在实际项目中会有迁移合并正在使用中的环境的需求&#xff0c;本文将以把B环境迁移合并到A环境为例&#xff0c;介绍如何迁移合并两个环境。 迁移前准备工作如下&#xff1a; 防止迁移过程中出现不可控的错误&#xff0c;迁移之前请备份目标环境default数据源库确保两个环境的…

GCSE英语语言考试-虚构小说考试问题和答案案例​

Analysing Fiction - Question and extract 虚构小说分析--问题和摘要 The extracts your exam questions are based on might be longer than the one here but you should still be able to write a close analysis. First of all, have a read, and see what ideas you can …

[附源码]Python计算机毕业设计大学生运动员健康管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

27-Vue之ECharts-通用配置

ECharts-通用配置前言标题提示框工具按钮图例完整代码前言 本篇来学习下ECharts图表中的通用配置 标题 title&#xff1a;标题 title: {text: "分数", // 标题文字textStyle: {color: red // 文字颜色},borderWidth: 2, // 标题边框宽度borderColor: blue, // 标…

[ Linux ] 可重入函数,volatile 关键字,SIGCHLD信号

目录 1.可重入函数 2.volatile 2.1从信号角度理解volatile的作用 2.2volatile的作用 3.SIGCHLD信号 3.1SIGCHLD信号的验证 1.可重入函数 在数据结构初阶时我们学习过链表&#xff0c;其中当然也学习过链表头插。在此我们复习一下链表头插&#xff0c;我们使用画图来演示…

Koa初体验

前面我们已经学习了express&#xff0c;另外一个非常流行的Node Web服务器框架就是Koa。 Koa官方的介绍&#xff1a; koa&#xff1a;next generation web framework for node.js&#xff1b; koa&#xff1a;node.js的下一代web框架&#xff1b; 事实上&#xff0c;koa是ex…

【云计算与大数据技术】Google、亚马逊、IBM、阿里云等云计算应用平台介绍讲解(超详细)

云应用跟云计算最大的不同在于&#xff0c;云计算作为一种宏观技术发展概念而存在&#xff0c;而云应用则是直接面对客户解决实际问题的产品。 “云应用”的工作原理是把传统软件“本地安装、本地运算”的使用方式变为”即取即用”的服务&#xff0c;通过互联网或局域网连接并操…

VUE学习(五)VUE项目发布启动

在项目目录下运行 npm run build 2.下载nginx nginx: download 双击nginx.exe运行 3.将打包好的vue项目下dist目录所有文件拷贝 4.粘贴至nginx目录html下 5.此时在浏览器中输入localhost 即可看到发布的网站了

【云计算与大数据技术】大数据概念和发展背景讲解(图文解释 超详细)

一、什么是大数据 大数据是一个不断发展的概念&#xff0c;可以指任何体量或负载下那个超出常规数据处理方法和处理能力的数据&#xff0c;数据本身可以是结构化&#xff0c;半结构化甚至是非结构化的&#xff0c;随着物联网技术与可穿戴设备的飞速发展&#xff0c;数据规模变…

首篇!BEV-Locator:多目端到端视觉语义定位网络(清华轻舟智航)

点击下方卡片&#xff0c;关注“自动驾驶之心”公众号ADAS巨卷干货&#xff0c;即可获取点击进入→自动驾驶之心【SLAM】技术交流群后台回复【BEV定位】获取本文论文&#xff01;摘要准确的定位能力是自动驾驶的基础。传统的视觉定位框架通过几何模型来解决语义地图匹配问题&am…

【C语言经典面试题】这样的char * 定义怎么回事

作者简介 *架构师李肯&#xff08;全网同名&#xff09;**&#xff0c;一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验&#xff0c;深耕IoT领域多年&#xff0c;熟知IoT领域的业务发展&#xff0c;深度掌握IoT领域的相关技术栈&#xff0c;包括但不限于主流…

Cookie | Cookie的理论基础、Cookie中常用的方法

目录 一&#xff1a;Cookie的理论基础 二&#xff1a;Cookie中常用的方法 一&#xff1a;Cookie的理论基础 &#xff08;1&#xff09;cookie怎么生成&#xff1f; ①session的实现原理中&#xff0c;每一个session对象都会关联一个sessionid&#xff0c;例如&#xff1a;JS…

中创软件递交上会稿:年营收不到2亿 税收优惠占利润比高

雷递网 雷建平 12月10日山东中创软件商用中间件股份有限公司&#xff08;简称&#xff1a;“中创软件”&#xff09;日前递交上会稿&#xff0c;准备在科创板上市。中创软件计划募资6亿元&#xff0c;其中&#xff0c;2.3亿元用于应用基础设施及中间件研发项目&#xff0c;1.3亿…

开源一个各种USB电缆的测试仪,再也不用担心被只有充电功能的数据线坑了

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;01 想知道你的USB Type C数据线是USB2或者USB3吗&#xff1f;大家是否有一些仅有充电功能的USB数据线在你的抽屉里&#xff0c;等待某个…

量子计算(十三):量子计算的if和while

文章目录 量子计算的if和while 一、基于测量的跳转 二、基于量子信息的IF和WHILE 量子计算的if和while 所谓量子线路&#xff0c;从本质上是一个量子逻辑门的执行序列&#xff0c;它是从左至右依次执行的。即使介绍了函数调用的思想&#xff0c;也可以理解为这是一种简单地…

10-11-12 - 实模式到保护模式

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 从计算机的历史谈起2. 绝对的权利带来的问题3. CPU历史的里程碑 - 80863.1 深入解析 [段地址 : 偏移地址]3.1.1 示例3.1.2 问题3.2 8086时期应用程序中的问题3.3 思考4. 80286的登场4.1 80286的兼容性4.2 初识保护模式4.2.1 描述…

JDBC连接数据库详解~

课前导读&#xff1a; 本文章有关JDBC连接数据库的操作&#xff0c;其中涉及了编译器idea的使用&#xff0c;其中连接的数据库为MySQL数据库&#xff0c;通过博主自己的学习和总结写出了下面的文章。 目录 课前导读&#xff1a; 一、JDBC简介 二、JDBC连接操作 三、源码提供…

数素数

目录 1013 数素数 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码长度限制: 时间限制: 内存限制: 思路: 1.判断素数 1.2素数判断代码: 2.数组存素数 2.2存素数代码: 3.输出Pm到Pn的全部素数 3.2代码 总代码: 总结: 题目…

Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…