html贝塞尔曲线爱心,史上最全的贝塞尔曲线(Bezier)全解(三):贝塞尔曲线实现满屏爱心...
这一篇文章会完整的介绍如何通过贝塞尔曲线实现爱心点赞的效果,如果实在看不懂,可以看第一篇贝塞尔曲线的简介,还有第二篇安卓中的简单使用;
好了,终于到了放大招的时候了,真实憋了很久了
这里写图片描述
先做一些准备工作,绘制各种颜色的红心:
private Bitmap creatHeart(int color) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(bitmap, 0, 0, criPaint);
canvas.drawColor(color, PorterDuff.Mode.SRC_ATOP);
canvas.setBitmap(null);
return newBitmap;
这里面比较关键的代码只有是 canvas.drawColor(color, PorterDuff.Mode.SRC_ATOP),关于PorterDuff,还是可以去学习了解一下的,很多时候还是很有用的,在这里简单的介绍一下;
这里写图片描述
这样就比较清晰明了了吧,这里使用的就是SRC_ATOP,去心的图形和颜色重叠部分,就是心了;
这样只要准备一个心形图片,就能实现格式各样的心了;
接下来就是进行根据轨迹进行绘制了,看过第一篇文章的,就应该根据几个点,就能绘制出来一条轨迹;这里使用属性动画,来获取相对应的轨迹;
首先
/**
* 绘制一个增值器
*/
class TypeE implements TypeEvaluator {
private PointF pointFFirst,pointFSecond;
public TypeE(PointF start,PointF end){
this.pointFFirst =start;
this.pointFSecond = end;
}
@Override
public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
PointF result = new PointF();
float left = 1 - fraction;
result.x = (float) (startValue.x*Math.pow(left,3)+3*pointFFirst.x*Math.pow(left,2)*fraction+3*pointFSecond.x*Math.pow(fraction, 2)*left+endValue.x*Math.pow(fraction,3));
result.y= (float) (startValue.y*Math.pow(left,3)+3*pointFFirst.y*Math.pow(left,2)*fraction+3*pointFSecond.y*Math.pow(fraction, 2)*left+endValue.y*Math.pow(fraction,3));
return result;
}
}
这个很简单,就是单纯的使用公式了,所以说想要绘制复杂的轨迹,我还是要重新拾起来被扔进粪坑的小学数学课本重新看看,当真是熏得泪流满面啊!!
接下来就很简单了,只要不停使用属性动画,不断变换位置就好了;
private void moveHeart(final ImageView view){
PointF pointFFirst = this.pointFFirst;
PointF pointFSecond = this.pointFSecond;
PointF pointFStart = this.pointFStart;
PointF pointFEnd = this.pointFEnd;
ValueAnimator animator = ValueAnimator.ofObject(new TypeE(pointFFirst, pointFSecond), pointFStart, pointFEnd);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
PointF value = (PointF) animation.getAnimatedValue();
view.setX(value.x);
view.setY(value.y);
}
});
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
AdvancePathView.this.removeView(view);
}
});
ObjectAnimator af = ObjectAnimator.ofFloat(view, "alpha", 1f, 0);
af.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
AdvancePathView.this.removeView(view);
}
});
AnimatorSet set = new AnimatorSet();
set.setDuration(3000);
set.play(animator).with(af);
set.start();
}
就是这么简单,完全没有难度啊有木有!!!
总的来说还是三步:
第一
:绘制各种颜色的心
绘制一个增值器,获取轨迹
使用属性动画,根据轨迹移动位置
好了,到这里我这一系列的文章就结束了,两天水时间搞的,感觉稍微有点水,但是就这样啦,毕竟本身不是很难的东西,有什么问题可以问我,有时间一定会耐心解答的;
html贝塞尔曲线爱心,史上最全的贝塞尔曲线(Bezier)全解(三):贝塞尔曲线实现满屏爱心...相关推荐
- 微信新彩蛋太6了,满屏爱心合为一心,还可以炸屎...
点上方"菜鸟学Python",选择"星标"484篇原创干货,第一时间送达 今天,小编又发现微信又有新彩蛋了,微信新增满屏爱心.炸屎表情,具体来说,微信更新到 8 ...
- HTML5七夕情人节表白网页(爱心雨-满屏爱心飘落)HTML+CSS+JavaScript
HTML5七夕情人节表白网页❤(爱心雨-满屏爱心飘落)❤ HTML+CSS+JavaScript 这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此 ...
- 【七夕特效】 -- 满屏爱心
Canvas简介: Canvas是HTML5的一个新特性,canvas又叫做画板.我们可以在canvas上绘制我们需要的图形.anvas本身是一个HTML元素,需要HTML元素的配合高度和宽度属性而定 ...
- 七夕情人节~html+css+javascript实现满屏爱心特效(程序员表白)
❉ 七夕情人节 ❤html+css+j❤实现满屏爱心特效(程序员表白) ❤程序员表白, 很多人和小编一样受到暴击,需要告白的同学加紧了,不要错过这个好时机. ❤许多程序员小伙伴总是苦于找不到合适的告白 ...
- 微信新彩蛋太 6 了,满屏爱心合为一心,还可以炸屎...
这是「进击的Coder」的第 164 篇热点新闻来源:菜鸟学Python " 阅读本文大概需要 2 分钟. " 今天,小编又发现微信又有新彩蛋了,微信新增满屏爱心.炸屎表情,具体来 ...
- HTML5七夕情人节表白网页(情人节满屏爱心HTML5特效) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码
HTML5七夕情人节表白网页❤情人节满屏爱心HTML5特效❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱 ...
- c语言满屏爱心,微信聊天可以发满屏动态爱心了 个性又浪漫!
前不久,分享过一个<微信深色模式隐藏表白技巧>,受到不少小伙伴欢迎.这种隐藏表白模式的神奇之处在于,只有在微信深色模式下,才能显示出隐藏字,浅色模式是隐藏的,另外支持双含义显示,个性又有创 ...
- HTML5七夕情人节表白网页制作【情人节满屏爱心HTML5特效】HTML+CSS+JavaScript html生日快乐祝福网页制作
这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...
- 史上最小白之CNN 以及 TextCNN详解
本小白是一名立志从事NLP的菜鸟,本来只准备写一篇TextCNN来加深自己理解地,但想要了解TextCNN那必然需要了解CNN的原理,写的过程中突然想起了自己在学习时各种看博客的心路历程,看一篇博客要 ...
最新文章
- python if语句多个条件-python – if / elif语句的多个条件
- 网络编程-计算机网络
- [置顶]树莓派Android Things物联网开发:入门及资料汇总
- 33.文件与 IO.rs
- 动态加载vs静态加载
- Oil Deposit
- 创建oracle 数据库表空间,角色,用户的sql语句
- 案例精解:insert逻辑读暴增至20万,只因Oracle Recyclebin过大
- ElementUI项目优化上线
- Linux创建swap文件
- Key-Value Coding (KVC)
- Lightroom Classic mac版怎样创建全景图和HDR全景图?
- 以前积攒的一个用Java程序生成验证码的代码
- Android 声音采集回声与回声消除
- 课时1 Excel简介与基本操作
- 【软件工程】三、软件开发方法学——结构化分析方法
- java实现png转ico,支持尺寸选择
- Arduino使用433MHz RF射频发射器和接收器的方法
- WORD2010文档里面突然不能输入汉字的解决办法
- 黑帽SEO网站优化常用的15种技巧