【情人节用Compose给女神写个爱心动画APP】

情人节用Compose给女神写个爱心动画APP

  • 前言
  • 涉及知识点
  • 实现思路
  • 实现过程
    • 绘制爱心
    • 创建动画效果
    • Preview预览效果
  • 完整源码
  • 彩蛋

前言

前一阵子看电视里的学霸用代码写了个炫酷的爱心,网上有很多js和python的源码,复制粘贴就能拥有,但是Android的好像还没有人写过。今天正好是情人节,咱们来用Compose写一个简单的爱心动画,告诉女神们,咱们程序猿也有自己的浪漫(/手动狗头)

废话不多说,直接看效果:
(源码在最后)
爱心动画效果

涉及知识点

本篇文章涉及到技术不多,也都不深,适合各方面技术入门,以下列出关键的一些:

  • Jetpack Compose
  • Compose动画
  • Canvas自由绘制
  • 三次贝塞尔曲线

实现思路

  1. 爱心是左右对称的,所以我们只要能实现半边,另外半边就很容易了

  2. 半边爱心的曲线不算太复杂,但也不简单,使用两段三阶贝塞尔曲线相连才可以达到效果,取样点可以自己草图上画一下,草图可以不用很精确,后续可以根据效果再调整参数,如下
    半边心取样点草图

  3. 绘制好一边之后,另一边就很简单,数据可以直接拿过来用,注意x轴符号取反就ok了

  4. 用Compose的InfiniteTransition实现大小透明度 的无限循环动画

实现过程

绘制爱心

讲解都在代码注释里了,直接看代码吧

@Composable
fun HeartBeat(modifier: Modifier = Modifier.fillMaxSize(),color: Color = Color.Red
) {Canvas(modifier = modifier) {//取canvas当前画布宽高的较小值-30,防止超出边界val minSize = min(size.height, size.width) - 30fval path = Path()//右半边爱心,先移动到中间心窝位置path.moveTo(center.x, center.y - minSize / 3)//相对位置的三阶贝塞尔曲线,从当前点连接下三个取样点path.relativeCubicTo(minSize / 4, -minSize / 4,minSize / 2, 0f,minSize / 2, minSize / 5)//同理,三阶贝塞尔曲线path.relativeCubicTo(0f, minSize / 3,-minSize * 3 / 8, minSize * 3 / 8,-minSize / 2, minSize * 3 / 4)//左半边爱心,同理,回到心窝位置开始,x轴参数取反即可path.moveTo(center.x, center.y - minSize / 3)path.relativeCubicTo(-minSize / 4, -minSize / 4,-minSize / 2, 0f,-minSize / 2, minSize / 5)path.relativeCubicTo(0f, minSize / 3,minSize * 3 / 8, minSize * 3 / 8,minSize / 2, minSize * 3 / 4)drawPath(path, color)}
}

创建动画效果

想要实现心跳的感觉,一个是大小的变化,还有一个就是透明度,由于是无线循环动画,所以使用Compose的InfiniteTransition来实现,不太了解的同学可以后续自行补习一下Compose动画

在HeartBeat方法内,Canvas代码块之上添加如下代码:

@Composable
fun HeartBeat(modifier: Modifier = Modifier.fillMaxSize(),color: Color = Color.Red,duration: Int = 600
) {//创建InfiniteTransitionval transition = rememberInfiniteTransition()//使用animateFloat创建透明度动画的State<Float>val alpha by transition.animateFloat(initialValue = 0.3f,targetValue = 1f,animationSpec = infiniteRepeatable(tween(duration),repeatMode = RepeatMode.Reverse))//同理,创建跳动大小动画的State<Float>val beatSize by transition.animateFloat(initialValue = 150f,targetValue = 50f,animationSpec = infiniteRepeatable(tween(duration),repeatMode = RepeatMode.Reverse))Canvas(modifier = modifier) {//...}
}

再改一下原来的Canvas,使用这两个动画参数

//...
Canvas(modifier = modifier) {val minSize = min(size.height, size.width) - beatSize//...drawPath(path, color, alpha)
}

Preview预览效果

这一步早在开发过程中就应该添加了,用Compose的话说:边看边开发,让你更加自信

@Preview
@Composable
fun HeartBeatPre() {HeartBeat()
}

至此就已经实现了这么一个简单的心跳动画,附上源码:

完整源码

/** Copyright (c) 2023.* @username: LiePy* @file: HeartBeat.kt* @project: ComposeAnimationKit* @model: ComposeAnimationKit.ComposeAnimationKit.main* @date: 2023/2/13 下午9:44*/package com.lie.composeanimationkit.animationimport androidx.compose.animation.core.*
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.tooling.preview.Preview
import kotlin.math.min/*** @desc 爱心跳动* @author LiePy* @date 2023/2/13*/@Composable
fun HeartBeat(modifier: Modifier = Modifier.fillMaxSize(),color: Color = Color.Red,duration: Int = 600
) {val transition = rememberInfiniteTransition()val alpha by transition.animateFloat(initialValue = 0.3f,targetValue = 1f,animationSpec = infiniteRepeatable(tween(duration),repeatMode = RepeatMode.Reverse))val beatSize by transition.animateFloat(initialValue = 150f,targetValue = 50f,animationSpec = infiniteRepeatable(tween(duration),repeatMode = RepeatMode.Reverse))Canvas(modifier = modifier) {//最小边作为正方形val minSize = min(size.height, size.width) - beatSizeval path = Path()//右半边爱心path.moveTo(center.x, center.y - minSize / 3)path.relativeCubicTo(minSize / 4, -minSize / 4,minSize / 2, 0f,minSize / 2, minSize / 5)path.relativeCubicTo(0f, minSize / 3,-minSize * 3 / 8, minSize * 3 / 8,-minSize / 2, minSize * 3 / 4)//左半边爱心path.moveTo(center.x, center.y - minSize / 3)path.relativeCubicTo(-minSize / 4, -minSize / 4,-minSize / 2, 0f,-minSize / 2, minSize / 5)path.relativeCubicTo(0f, minSize / 3,minSize * 3 / 8, minSize * 3 / 8,minSize / 2, minSize * 3 / 4)drawPath(path, color, alpha)}
}@Preview
@Composable
fun HeartBeatPre() {HeartBeat()
}

彩蛋

本动画已收录至我的 git 开源库项目,持续更新中。。。
GitHub: ComposeAnimationKit
Gitee: ComposeAnimationKit

导入使用ComposeAnimationKit,更多好玩的动画等你发现,

implementation 'io.github.LiePy:ComposeAnimationKit:1.1.2' 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python表白玫瑰花绘制——情人节表白

python表白玫瑰花绘制——情人节表白 搬运不易&#xff0c;路过的各位大佬请点个赞 python表白玫瑰花绘制——情人节表白 python表白玫瑰花绘制——情人节表白一、玫瑰花绘制—深红色二、玫瑰花绘制—五颜六色三、玫瑰花绘制—粉红色四、玫瑰花绘制—红色五、桃花绘制 一、玫瑰…

用HTML给对象送玫瑰花

文章目录 一、复制以下代码&#xff0c;粘贴到文本文档&#xff0c;把后缀改成.html二、效果 我是廖志伟&#xff0c;一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验&#xff0c;研究过各种常见框架及中间件的底层源码&…

鲜花在线销售平台的设计与实现/鲜花商城/网上花店管理系统

摘 要 为了解决客户便捷地在网上购物&#xff0c;本文设计和开发了一个鲜花在线销售平台。本系统是基于web架构设计&#xff0c;SSM框架&#xff0c;javascript技术的前台页面设计与实现&#xff0c;使用Mysql数据库管理&#xff0c;综合采用java模式来完成系统的相关功能。主…

求职干货,泄露太多我担心HR封杀我(附带简历模板)

一、前言 “生活如水&#xff0c;时而浑浊&#xff0c;时而清澈”&#xff0c;找工作面对挫折我们可以短暂的迷失&#xff0c;但不要忘记最初的梦想。 找工作我投过几十份简历&#xff0c;由于是12月年底&#xff08;推荐秋招或春招&#xff09;&#xff0c;很多公司都不招人…

东南亚的招聘骗局,程序员请注意!

阅读本文大概需要 5.2 分钟。 总有些我认为是常识的事情&#xff0c;在别人看来都是第一次接触。很多骗局都是如此&#xff0c;圈内人不上当&#xff0c;圈外人不警惕。毕竟骗子吃的就是信息不对称的生意。关于东南亚的招聘骗局&#xff0c;便是如此。 他们当前主力针对的是程…

简历模板哪里找?这几个免费网站一定要收藏

分享5个简历模板网站&#xff0c;免费下载&#xff0c;职场必备&#xff0c;建议收藏&#xff01; 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 网站主要以设计类素材为主&#xff0c;办公类素材也非常多&#xff0c;分类很清晰。简历模板风格类型多&#xff…

代购工作简历如何写得高大上?

蓝豹职业辅导&#xff1a;专业简历制作,就业辅导,模拟面试,职业规划专家&#xff01; 代购工作简历如何写得高大上&#xff1f; 话不多说&#xff0c;直接上案例&#xff0c;简历范文&#xff0c;简历修改前&#xff1a; 简历负责代购工作&#xff0c;通过对接亲朋好友代购需求…

cesium primitive api 修改模型矩阵实现平移效果

cesium 图元 api Cesium是一个基于WebGL的开源虚拟地球软件开发库&#xff0c;提供了丰富的API&#xff0c;其中包括图元 API和实体API。 异同点&#xff1a; 相同点&#xff1a;图元API和实体API都是用来绘制三维场景中的对象&#xff0c;包括点、线、面等各种形状。 不同点&…

SSM之SpringMVC day01

今日内容 理解SpringMVC相关概念完成SpringMVC的入门案例学会使用PostMan工具发送请求和数据掌握SpringMVC如何接收请求、数据和响应结果掌握RESTful风格及其使用完成基于RESTful的案例编写 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;…

20230316英语学习

篇目1 Why We Forget Most of the Books We Read 为啥读过的书我们大多都会忘记&#xff1f; Pamela Paul’s memories of reading are less about words and more about the experience.“I almost always remember where I wasand I remember the book itself.I remember th…

20230320英语学习

篇目1 The Myth of Sustainable Fashion 时尚行业&#xff0c;能否实现可持续发展&#xff1f; Few industries tout their sustainability credentials more forcefully than the fashion industry.Products ranging from swimsuits to wedding dresses are marketed as carb…

雷军入局ChatGPT大战...

14号&#xff0c;小米CEO雷军在微博宣布&#xff0c;正在研发一些“有趣的技术和产品”。 雷军称&#xff0c;此前曾多次被问及对于大模型和AIGC的看法。 此次&#xff0c;雷军正式对这些问题公开进行回应&#xff0c;表示“在AI领域已经耕耘多年”&#xff0c;对大模型“当然会…

MiniGPT4,开源了!

梦晨 发自 凹非寺量子位 | 公众号 QbitAI GPT-4识图功能迟迟不开放&#xff0c;终于有人忍不住自己动手做了一个。 MiniGPT-4来了&#xff0c;Demo开放在线可玩。 传一张海鲜大餐照片上去&#xff0c;就能直接获得菜谱。 传一张商品效果图&#xff0c;就可以让AI写一篇带货文案…

别再纠结 GPT-4 了,最强平替 MiniGPT4 开源了,完全免费!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 GPT-4识图功能迟迟不开放&#xff0c;终于有人忍不住自己动手做了一个。 MiniGPT-4来了&#xff0c;Demo开放在线可玩。 传一…

Midjourney最新「平移扩图」玩法,自定义无限延展,轻松创造超长画卷

尚恩 发自 凹非寺量子位 | 公众号 QbitAI 玩扩图&#xff0c;Midjourney是认真的。 现在只要几个指令&#xff0c;就能轻松创造超长画卷。 我们先来看一张图&#xff0c;这张是原来的图&#xff1a; 这是经过自定义扩充后的效果&#xff0c;是酱婶儿&#xff1a; 这就是Midjour…

文心一言APP国区可下载!免费体验120+玩法,超多新花样!

编辑 | 量子位 点击下方卡片&#xff0c;关注“自动驾驶之心”公众号 ADAS巨卷干货&#xff0c;即可获取 本文只做学术分享&#xff0c;如有侵权&#xff0c;联系删文 终于&#xff0c;正版百度文心一言APP上架苹果商店了&#xff01; &#xff08;此前百度因为盗版文心一言APP…

掌握Tampermonkey,让网页玩出新花样

掌握Tampermonkey&#xff0c;让网页玩出新花样 何为Tampermonkey?Tampermonkey有何神通&#xff1f;操作示例 今天我要向朋友们介绍一个超酷的浏览器插件&#xff0c;Tampermonkey。我把它称之为一根神奇的魔法棒&#xff0c;可以让你对网页的玩法、样式和功能实现自定义。 熟…

歌神影帝:搞过数据库的人,职业宽度超乎你的想象

人工智能时代&#xff0c;AI 会取代很多工种&#xff0c;数据处理、数据库运维等等&#xff0c;都会慢慢的演进到自动化时代&#xff0c;ChatGPT 已经为行业带来了深刻影响。 而我们如果不做数据库&#xff0c;还能从事什么岗位的工作呢&#xff1f; 答案可以有&#xff1a;歌神…

人工智能时代,有哪些新的职业机会?

人工智能技术的发展和应用对社会产生的影响非常大&#xff0c;尤其是近期接连而来ChatGPT&#xff0c;GPT4&#xff0c;让很多圈外人都对人工智能产生了更大的兴趣&#xff0c;人工智能技术带给我们方便的同时&#xff0c;也带给了我们焦虑&#xff0c;大家都在思考一个问题&am…

最高年薪近56万!2023最新AIGC就业趋势报告出炉

【导读】猎聘大数据研究院重磅发布《AIGC就业趋势大数据报告2023》&#xff0c;招聘平均年薪已达40万&#xff0c;博士需求量同比增长超100%。 不用赘述&#xff0c;大家都知道&#xff0c;最近半年ChatGPT是有多么火爆。 随着ChatGPT的全球爆火&#xff0c;AIGC也已成功从科…