闲来无事研究了下qq的点赞功能,qq点赞后会随机生成不同颜色的图片,生成方式如下:

 //生成不同颜色的点赞图片private Bitmap generateRandomColorBitmap(){int w,h;w=h=dip2px(this,20);Bitmap dst= Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);Bitmap src=BitmapFactory.decodeResource(getResources(),R.mipmap.pql).copy(Bitmap.Config.ARGB_8888, true);;Canvas dstCanvas=new Canvas(dst);Canvas srcCanvas=new Canvas(src);Paint rectPaint=new Paint();rectPaint.setStyle(Paint.Style.FILL);rectPaint.setColor(randomColors[getRandom(0,5)]);dstCanvas.drawRect(0,0,w,h,rectPaint);Paint p=new Paint();p.setStyle(Paint.Style.FILL);p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));srcCanvas.drawBitmap(dst,0,0,p);dst.recycle();return src;}

然后运动的轨迹是曲线的,可以用三次贝塞尔曲线生成轨迹路线代码如下:

/*** 三次贝塞尔曲线计算公式* B(t) = P0 * (1-t)^3 + 3 * P1 * t * (1-t)^2 + 3 * P2 * t^2 * (1-t) + P3 * t^3, t ∈ [0,1]* @param t  曲线长度比例* @param p0 起始点* @param p1 控制点1* @param p2 控制点2* @param p3 终止点* @return t对应的点*/private  PointF CalculateBezierPointForCubic(float t, PointF p0, PointF p1, PointF p2, PointF p3) {PointF point = new PointF();float temp = 1 - t;point.x = p0.x * temp * temp * temp + 3 * p1.x * t * temp * temp + 3 * p2.x * t * t * temp + p3.x * t * t * t;point.y = p0.y * temp * temp * temp + 3 * p1.y * t * temp * temp + 3 * p2.y * t * t * temp + p3.y * t * t * t;return point;}

运行动过程当中的变化可以用属性动画实现代码如下:

 public void setScale(float v){img.setScaleY(v);img.setScaleX(v);}public void setPosition(float v){//计算位置的变化PointF p=CalculateBezierPointForCubic(v,p0,p1,p2,p3);img.setX(p.x);img.setY(p.y);}public void setAlpha(float v){img.setAlpha(v);}public void startAnimator(){set.playTogether(ObjectAnimator.ofFloat(this,"scale",0.4f,1.3f,1.0f));set.playTogether(ObjectAnimator.ofFloat(this,"position",0.0f,1.0f));set.playTogether(ObjectAnimator.ofFloat(this,"alpha",0.0f,1.0f,0.0f));set.setInterpolator(new LinearInterpolator());set.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {parentView.removeView(img);moveImages.remove(AnimaImageView.this);}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}});set.setDuration(2000);set.start();}

最终效果:

完整代码:

https://github.com/XIAIBIANCHENG/qqthumb

Android 仿qq 点赞功能相关推荐

  1. android 仿qq相册功能,Android第四十九期 - 仿QQ空间上传功能+本地数据库存储

    最近在看撸撸代码,他自己创了一种,网上有三种,分别是OpenDroid,greenDao,sugar,Sqlite原生写法,感觉都差不多,个人使用最优的是greenDao,下面开始介绍:    1.O ...

  2. android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id(修改版)

    首先注明该文章是借签别人的博客,原文博文地址点击打开链接 android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id 这个需求来源:本人做集成环信聊天时,项目需要@功能 ...

  3. android 仿qq录音动画,Android实现QQ点赞效果动画 Android动画

    版权声明:本文为代码部落原创文章,转载请注明出处. 前言 点赞是现在社交app中比较常用的功能,一个小小的点赞按钮如果能加上一些有趣动画,一来告诉用户你已经点了赞(这是对一些手残党极大的福音),二来人 ...

  4. android人脸识显示头像自定义,Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制 ...

  5. Android仿QQ实现聊天功能

    前段时间下载了Android仿QQ界面和聊天的Demo,发现很有意思,于是研究了一下并自己在此基础上集成环信实现了在线聊天功能,可以实现注册.加人.审核通知.推送.创建群组.群组聊天,并加入了炫酷的背 ...

  6. android qq分组展开,Android仿qq分组管理的第三方库

    本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...

  7. android 仿qq修改头像,Qt:小项目仿QQ修改头像界面,技术点记录

    最近写了一个修改头像功能的UI,布局参考了QQ目前的修改头像界面.如下图 这里主要说明一下两个地方的技术:1.头像图片上层的遮罩层,圆形外部为灰色,内部为全透明:2.上传图片宽高比例可以通过鼠标拖拽移 ...

  8. Android仿QQ主界面-------完善篇

    在我前面的博文中,做出了仿QQ主界面的主要工作,博文地址:Android仿QQ主界面. 但是在那一篇中还有一个不起眼的地方没做,今天就完善它. 今天要实现在文字下面来个ImageView,实现动画.先 ...

  9. android取QQ昵称,Android仿QQ复制昵称效果的实现方法

    背景: 在上一篇文章中,给出了一种复制QQ效果的方案,今天就来讲讲换一种方式实现.主要依赖的是一个开源项目https://github.com/shangmingchao/PopupList. 解决办 ...

  10. Android仿QQ侧滑菜单

    先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单 ####整体思路: 自定义ItemView的根布局(SwipeMenuLayout extends LinearL ...

最新文章

  1. DataPipeline联合Confluent Kafka Meetup上海站
  2. 批量kill掉包含某个nginx的进程
  3. HTTP Error 401.2 - Unauthorized iis7 错误
  4. matlab 里catmull rom,Unity中的曲线插值CatmullRom
  5. ★LeetCode(627)——交换工资(MySQL)
  6. 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT
  7. C# 操作json 序列化 反序列化
  8. 北斗导航 | RAIM算法之奇偶矢量法(原理讲解,附代码链接:可用性判定)
  9. 【转载】用CAM350制作CAM资料的基本步骤
  10. OpenCV4学习笔记(71)——散焦图像去模糊滤波
  11. EPLAN学习笔记——常用操作步骤
  12. 百度云库计算机网页制作说课PPT,网页制作说课资料得
  13. post 防篡改_表单提交数据防篡改
  14. 学习笔记——共阳数码管的动态显示
  15. 苹果手机显示已用短信服务器发送,iPhone手机一般发短信给对方,提示已送达和已读分别有什么不一样的意义。...
  16. 【产品经理】日活跃用户「MAU」 和月活跃用户「DAU」
  17. resnet-50介绍(一)
  18. ios和android更新,Android和iOS同时进行更新 这次又带来什么
  19. 【033】基于51单片机的步进电机角度测量与速度设定Proteus仿真设计
  20. 新闻资讯小程序app

热门文章

  1. 多实例学习PCNN在关系抽取中的应用
  2. 基于微信小程序的课堂考勤系统设计与实现
  3. 一般纳税人税额计算_一般纳税人企业缴税计算
  4. Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真
  5. 有效解决0x0000011b共享打印机无法连接(适用所有win系统)
  6. CAD梦想画图操作界面
  7. Latex语法学习///待更新
  8. 数据结构-第二章(1)-线性结构
  9. 算法动画图解(安卓)、排序算法的可视化
  10. log4j配置文件配置及解读