这一篇文章会完整的介绍如何通过贝塞尔曲线实现爱心点赞的效果,如果实在看不懂,可以看第一篇贝塞尔曲线的简介,还有第二篇安卓中的简单使用;

好了,终于到了放大招的时候了,真实憋了很久了

这里写图片描述

先做一些准备工作,绘制各种颜色的红心:

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)全解(三):贝塞尔曲线实现满屏爱心...相关推荐

  1. 微信新彩蛋太6了,满屏爱心合为一心,还可以炸屎...

    点上方"菜鸟学Python",选择"星标"484篇原创干货,第一时间送达 今天,小编又发现微信又有新彩蛋了,微信新增满屏爱心.炸屎表情,具体来说,微信更新到 8 ...

  2. HTML5七夕情人节表白网页(爱心雨-满屏爱心飘落)HTML+CSS+JavaScript

    HTML5七夕情人节表白网页❤(爱心雨-满屏爱心飘落)❤ HTML+CSS+JavaScript 这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此 ...

  3. 【七夕特效】 -- 满屏爱心

    Canvas简介: Canvas是HTML5的一个新特性,canvas又叫做画板.我们可以在canvas上绘制我们需要的图形.anvas本身是一个HTML元素,需要HTML元素的配合高度和宽度属性而定 ...

  4. 七夕情人节~html+css+javascript实现满屏爱心特效(程序员表白)

    ❉ 七夕情人节 ❤html+css+j❤实现满屏爱心特效(程序员表白) ❤程序员表白, 很多人和小编一样受到暴击,需要告白的同学加紧了,不要错过这个好时机. ❤许多程序员小伙伴总是苦于找不到合适的告白 ...

  5. 微信新彩蛋太 6 了,满屏爱心合为一心,还可以炸屎...

    这是「进击的Coder」的第 164 篇热点新闻来源:菜鸟学Python " 阅读本文大概需要 2 分钟. " 今天,小编又发现微信又有新彩蛋了,微信新增满屏爱心.炸屎表情,具体来 ...

  6. HTML5七夕情人节表白网页(情人节满屏爱心HTML5特效) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码

    HTML5七夕情人节表白网页❤情人节满屏爱心HTML5特效❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱 ...

  7. c语言满屏爱心,微信聊天可以发满屏动态爱心了 个性又浪漫!

    前不久,分享过一个<微信深色模式隐藏表白技巧>,受到不少小伙伴欢迎.这种隐藏表白模式的神奇之处在于,只有在微信深色模式下,才能显示出隐藏字,浅色模式是隐藏的,另外支持双含义显示,个性又有创 ...

  8. HTML5七夕情人节表白网页制作【情人节满屏爱心HTML5特效】HTML+CSS+JavaScript html生日快乐祝福网页制作

    这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...

  9. 史上最小白之CNN 以及 TextCNN详解

    本小白是一名立志从事NLP的菜鸟,本来只准备写一篇TextCNN来加深自己理解地,但想要了解TextCNN那必然需要了解CNN的原理,写的过程中突然想起了自己在学习时各种看博客的心路历程,看一篇博客要 ...

最新文章

  1. python if语句多个条件-python – if / elif语句的多个条件
  2. 网络编程-计算机网络
  3. [置顶]树莓派Android Things物联网开发:入门及资料汇总
  4. 33.文件与 IO.rs
  5. 动态加载vs静态加载
  6. Oil Deposit
  7. 创建oracle 数据库表空间,角色,用户的sql语句
  8. 案例精解:insert逻辑读暴增至20万,只因Oracle Recyclebin过大
  9. ElementUI项目优化上线
  10. Linux创建swap文件
  11. Key-Value Coding (KVC)
  12. Lightroom Classic mac版怎样创建全景图和HDR全景图?
  13. 以前积攒的一个用Java程序生成验证码的代码
  14. Android 声音采集回声与回声消除
  15. 课时1 Excel简介与基本操作
  16. 【软件工程】三、软件开发方法学——结构化分析方法
  17. java实现png转ico,支持尺寸选择
  18. Arduino使用433MHz RF射频发射器和接收器的方法
  19. WORD2010文档里面突然不能输入汉字的解决办法
  20. 黑帽SEO网站优化常用的15种技巧

热门文章

  1. 小游戏-表白-整蛊——娱乐(C语言基础)
  2. 【科研利器】Zotero 配合 ipad,读文献效率翻倍!
  3. Exception和RuntimeException
  4. 浅析大数据时代下市场研究方法
  5. 拍照遥控器——Wifi指纹定位+图像识别Android应用
  6. php连接firebird_PHP: Firebird/InterBase - Manual
  7. Chrome网上应用店开发者注册费的支付方法
  8. 过驱动保护第一套视频(63课)
  9. wordpress禁用Gutenberg(古藤保)编辑器代码
  10. 分享个最佳的代码片段在线测试网站