您的位置:首页 > 编程语言

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

2019-08-09 09:48 1491 查看
原文链接:https://data.newrank.cn/m/s.html?s=PigpOzA/LTE%3D

作者 | 威威喵
责编 | 屠敏出品 | 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】

[strong] 热 文 推 荐 [/strong]

华为方舟编译器开源,我命由我不由天!如何将 MySQL 去重操作优化到极致?| CSDN 博文精选吊打 IE、Firefox,谷歌 Chrome 十年封神记沃尔玛也要发币了,Libra忙活半天为他人做了嫁衣?华为高通5G华山论剑,一文看懂5G芯片背后的明争暗斗做实验、修电脑、命题相亲……IT 大佬教你七夕如何撩妹!自然语言处理十问!独家福利七夕大礼包:26个AI学习资源送给你!☞痛!为什么说李彦宏无法拯救百度?
点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: