作者 | 威威喵

责编 | 屠敏

出品 | CSDN 博客

直接步入正题,我们要实现的是一个 Android 客户端应用里面的一种点赞效果,比如你点一下那个爱心型的图片,就会产生一个小爱心,而且会以曲线的方式进行上升,直到它消失为止。

文字描述只能是这样的了,我们直接来看动态图吧,效果更直观。

本案例是由我自己写的,因为之前对这个贝塞尔曲线有一点点了解,还有无意间看到了这个效果,觉得挺赞的,就顺便写了一下demo,并且学习了一些关于贝塞尔曲线的相关知识。

首先,要看懂本案例的代码,你需要具备 Android 自定义 View 的基本知识,并且你还有了解一些关于贝塞尔曲线的公式和算法。不过没关系,我们并不需要对贝塞尔深刻了解,只要会基本的根据公式,套用代码就好了。

来看一下贝塞尔曲线的一些相关知识,我也是从大佬的博客中学习得来的。我们来看看什么是贝塞尔曲线?

贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。

更形象的就直接来看动态图吧。

一阶贝塞尔曲线公式:由 P0 至 P1 的连续点, 描述的一条线段

二阶贝塞尔曲线公式:曲线的切线 P0-P1、P1-P2 组成的运动轨迹

三阶贝塞尔曲线公式:

从上面的动态图,可以很直观的看到曲线的计算公式和它的路径形成的规律。而我们要实现的效果,运用的就是三阶贝塞尔曲线的公式。首先,需要确定曲线的路径的话,就必须先确定它的点位置。我以是这样的方式来确定点位置的,如下图:

我使用的就是这三个点,两边都可以,随机的选择一边。这样的话,我们的曲线就在屏幕内,它的形成大致和我们上面的动态图有点类似。那么看代码:

上面代码是初始化两种点的坐标,mLoveX,mLoveY 表示我们的爱心起始的位置。第一个集合点,对应图中的蓝线,第二个集合点,就对应橙色了。

接下来是重点部分,也就是把贝塞尔曲线公式转化为代码的形式,根据动态图中有一个 t 值,它的区间是 [0,1] 的,这个也很形象,t 从 0 变到 1 时,意味着曲线已经绘制完了。看代码:

刚刚我们定义的两种点的集合,就可以将它传入了,这样根据 k 值的变化,就可以得到对应位置曲线上的点坐标。接下来,我们的任务就是开启一个子线程去跟新 k 值,将 k 值有 0 加到 1,然后返回的每个 point 对象,就是整条曲线的坐标散点。执行子线程获取点的代码:

通过上面代码,我们就可以获取爱心图片的 x,y 坐标值了,然后再通过 onDraw() 里面将它进行绘制就搞定啦。

这里的爱心,我使用的是六张不同的图片,我之前想尝试使用爱心函数公式来绘制的,不过也放弃了,计算太慢了,每个爱心算出来都要停顿一下,只好换图片的形式。

最后提一下就是点击这个图片才绘制的功能,我是在 onTouchEvent 中拿到点击的坐标位置,然后去判断它的点击位置是不是在那个爱心图片里面,代码如下:

好了,最后也没什么好介绍的了,剩下的基本都是自定义 View 的知识,我们主要是关注这个贝塞尔曲线是如何绘制的就好,那么完整代码如下:

这就是整个效果的代码图了,将它放到 activity_main 里面,运行一下就可以看到效果了。

声明:本文为 CSDN 博客精选文章,版权归作者所有。作者:威威喵

原文:https://blog.csdn.net/smile_Running/article/details/98170645

【END】

这4个Python实战项目,让你很快读懂Python!

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

 热 文 推 荐 

华为方舟编译器开源,我命由我不由天!

如何将 MySQL 去重操作优化到极致?| CSDN 博文精选

吊打 IE、Firefox,谷歌 Chrome 十年封神记

沃尔玛也要发币了,Libra忙活半天为他人做了嫁衣?

华为高通5G华山论剑,一文看懂5G芯片背后的明争暗斗

做实验、修电脑、命题相亲……IT 大佬教你七夕如何撩妹!

自然语言处理十问!独家福利

七夕大礼包:26个AI学习资源送给你!

☞痛!为什么说李彦宏无法拯救百度?

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

贝塞尔曲线之爱心点赞代码全解析!| CSDN 博文精选相关推荐

  1. 手把手教你使用Flask轻松部署机器学习模型(附代码链接) | CSDN博文精选

    作者 | Abhinav Sagar 翻译 | 申利彬 校对 | 吴金笛 来源 | 数据派THU(ID:DatapiTHU) 本文旨在让您把训练好的机器学习模型通过Flask API 投入到生产环境  ...

  2. Vision Transformer(ViT)PyTorch代码全解析(附图解)

    Vision Transformer(ViT)PyTorch代码全解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单.本文将根 ...

  3. 主板诊断卡代码全解析

    主板诊断卡代码全解析 RUN灯功能介绍 该灯只用极少部件,故自身故障率极低,且只需极少的主板插槽信号,故即使插到一个坏的插槽中虽无法走代码,或其它的所有指示灯都不亮,但该灯很有可能照常工作,您可根据: ...

  4. 贝塞尔曲线 花束直播点赞效果

    1. 效果 先说一下这种效果都用到了哪些东西: 1.自定义View的一些基础: 2.随机数的使用: 3.插补器的使用: 4.属性动画的一些高级用法 5.贝塞尔曲线应用到属性动画 2.分析和实现 2.1 ...

  5. 使用二阶贝塞尔曲线画爱心

    简介 上一篇这一篇让你彻底搞懂贝塞尔曲线的原理中,我们介绍了贝塞尔曲线的原理.这一篇我们先用二阶贝塞尔曲线来做一个应用 -- 绘制爱心.首先回顾一下二阶贝塞尔曲线. 如上图所示,经过推导得出的曲线上的 ...

  6. 【又是一波重点】深度解析服务器科普知识 | CSDN博文精选

    戳蓝字"CSDN云计算"关注我们哦! 作者 | Hardy晗狄 转自 | CSDN博客 责编 | 阿秃 服务器是网络数据的节点和枢纽,是一种高性能计算机,存储.处理网络上80%的数 ...

  7. circlegan_CycleGAN原理以及代码全解析

    许多名画造假者费尽毕生的心血,试图模仿出艺术名家的风格.如今,CycleGAN就可以初步实现这个神奇的功能.这个功能就是风格迁移,比如下图,照片可以被赋予莫奈,梵高等人的绘画风格 这属于是无配对数据( ...

  8. tensorflow代码全解析 -3- seq2seq 自动生成文本

    模型概述 序列建模seq2seq,给定一个序列A,模型生产另一个序列B,然后模型再由序列B生成C,以此一直持续下去. 基本工作流程如下: 序列A中的每一个单词通过word_embedding操作以后, ...

  9. R语言与临床模型预测——LASSO回归,单因素多因素cox,差异表达分析,Venn图,森林图,列线图,矫正曲线,ROC全套代码及解析——第十三部分 校准曲线 本专栏可免费答疑

    1.下载数据 2. 匹配基因 3. 基因去重复 4.匹配临床数据 5.批量cox回归分析 6.差异表达基因筛选 7.取交集,选出预后相关的差异表达基因 8.森林图绘制 9.lasso回归进一步排除具有 ...

最新文章

  1. php偶尔500,python – 偶尔500错误
  2. 不使用梯度裁剪和使用梯度裁剪的对比(tensorflow)
  3. 如何让AI机器人的对话更加自然?
  4. 关于页面加载的方法收集
  5. @resource 与 @autowired
  6. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  7. css 中图片旋转,倾斜,位移,平滑
  8. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
  9. linux python2.7 scipy_scipy.sparse.linalg.sp为Linux系统上的大型稀疏矩阵解决了令人惊讶的行为...
  10. java常见面试题——java常见笔试题
  11. docker 启动时指定需要绑定的网卡_Docker容器网络-基础篇
  12. oracle时间查询
  13. java 上界和下界,Java 泛型上下界(上下限)
  14. Codeforces Round #553 (Div. 2) 题解
  15. [ZJOI2007]捉迷藏 (线段树,括号序列)
  16. 泰牛PHP基础+高级+实战+全套课件(大牛班)
  17. 网络热门知识点,Linux内核——网络协议栈基本知识
  18. 一些Camera相关概念整理
  19. FPGA学习-Verilog例化说明
  20. 与或树的盲目搜索和启发式搜索

热门文章

  1. xampp apache无法启动的解决方法
  2. 全国大学生计算机技能应用大赛Java模拟题
  3. 矩池云怎么上传文件夹
  4. python一行包含if else需要注意的点
  5. epoll和poll的C++11多线程练习
  6. 中国水产养殖疫苗行业市场供需与战略研究报告
  7. 连续液位测量行业调研报告 - 市场现状分析与发展前景预测
  8. 车轮轴承行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. 活动预告|一个重塑区块链行业生态的新物种即将诞生!
  10. 限量!“Java 成长笔记” Spring Boot/Sentinel/Nacos 高并发