我这里做的是一个仿抖音点赞的动画,监听双击事件,在双击位置添加图片,对其进行一系列的缩放、移动、旋转、透明度的动画从而达到效果。

效果图:

制作思路:

1.将该ViewGroup的事件通过touch方法传递给创建的SimpleOnGestureListener,将双击事件回调给onDoubleTap方法。

2.在双击的坐标位置,添加一个ImageView,并设置大小和正确的左上边距。

3.观察抖音点赞动画,是通过第一阶段缩小、透明度,第二阶段的放大、透明度、上移的动画组合,进行实现动画效果。

点赞view代码:

public class LikeView extends RelativeLayout {

private GestureDetector gestureDetector;

/** 图片大小 */

private int likeViewSize = 300;

private int[] angles = new int[]{-30, 0, 30};

public LikeView(Context context) {

super(context);

init();

}

public LikeView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

private void init() {

//将事件传给GestureDetector处理双击事件

gestureDetector = new GestureDetector(new MyGestureDetectorListener());

setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

gestureDetector.onTouchEvent(event);

return true;

}

});

}

class MyGestureDetectorListener extends GestureDetector.SimpleOnGestureListener {

@Override

public boolean onDoubleTap(MotionEvent e) {

addImageView(e);

return true;

}

}

/**

* 在手势双击位置添加imageview

*

* @param e

*/

private void addImageView(MotionEvent e) {

ImageView imageView = new ImageView(getContext());

imageView.setImageDrawable(getResources().getDrawable(R.mipmap.ic_like)); //这里如果用background属性,添加在边缘图片会变形

addView(imageView);

RelativeLayout.LayoutParams layoutParams = new LayoutParams(likeViewSize, likeViewSize);

layoutParams.leftMargin = (int) e.getX() - likeViewSize / 2;

layoutParams.topMargin = (int) e.getY() - likeViewSize / 2;

imageView.setLayoutParams(layoutParams);

playAnim(imageView);

}

private void playAnim(final ImageView imageView) {

AnimationSet animationSet = new AnimationSet(true);

int degrees = angles[new Random().nextInt(3)];

animationSet.addAnimation(AnimUtils.rotateAnim(0, 0, degrees));

animationSet.addAnimation(AnimUtils.scaleAnim(100, 2f, 1f, 0));

animationSet.addAnimation(AnimUtils.alphaAnim(0, 1, 100, 0));

animationSet.addAnimation(AnimUtils.scaleAnim(500, 1f, 1.8f, 300));

animationSet.addAnimation(AnimUtils.alphaAnim(1f, 0, 500, 300));

animationSet.addAnimation(AnimUtils.translationAnim(500, 0, 0, 0, -400, 300));

animationSet.setAnimationListener(new Animation.AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationEnd(Animation animation) {

new Handler().post(new Runnable() {

public void run() {

removeView(imageView);

}

});

}

@Override

public void onAnimationRepeat(Animation animation) {

}

});

imageView.startAnimation(animationSet);

}

}

所需动画工具类代码,这里都是用的补间动画。

public class AnimUtils {

/**

* 以中心缩放动画

*

* @param from

* @param to

*/

public static ScaleAnimation scaleAnim(long time, float from, float to, long offsetTime) {

ScaleAnimation scaleAnimation = new ScaleAnimation(from, to, from, to,

Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

scaleAnimation.setStartOffset(offsetTime);

scaleAnimation.setInterpolator(new DecelerateInterpolator());

scaleAnimation.setDuration(time);

return scaleAnimation;

}

/**

* 旋转动画

*

* @param time

*/

public static RotateAnimation rotateAnim(long time, int fromDegrees, float toDegrees) {

RotateAnimation rotateAnimation = new RotateAnimation(fromDegrees, toDegrees,

Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

rotateAnimation.setDuration(time);

return rotateAnimation;

}

/**

* 移动动画

*

* @param fromX

* @param toX

* @param fromY

* @param toY

*/

public static TranslateAnimation translationAnim(long time, float fromX, float toX, float fromY, float toY, long offsetTime) {

TranslateAnimation anim = new TranslateAnimation(fromX, toX, fromY, toY);

anim.setDuration(time);

anim.setInterpolator(new DecelerateInterpolator());

anim.setStartOffset(offsetTime);

return anim;

}

/**

* 透明度动画

*

* @param fromAlpha

* @param toAlpha

* @param duration

*/

public static AlphaAnimation alphaAnim(float fromAlpha, float toAlpha, long duration, long offsetTime) {

AlphaAnimation anim = new AlphaAnimation(fromAlpha, toAlpha);

anim.setDuration(duration);

anim.setStartOffset(offsetTime);

return anim;

}

}

html5点赞仿抖音,仿抖音之——点赞动画相关推荐

  1. 仿抖音 APP 视频切换和点赞效果

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:Yun丶Lei 链接:https://www.jianshu.com/p/c43c75303174 声明:本文已 ...

  2. 推荐 9 个 GitHub 上练手项目(在线考试、仿美团、仿抖音、仿B站、仿头条...)

    GitHub项目推荐 推荐的这几个 GitHub 项目并不是简单的 XX 管理系统,我会从下面这些方向推荐几个入门级别但是不那么 Low 的项目. "我自己是一名从事了6年web前端开发的老 ...

  3. 快抖创客丨抖音怎么带货?抖音带货有什么标准?

    抖音的玩法,并不是表面看到那么简单.当大部分人把抖音当做娱乐时,已经有勇者在研究抖音上有哪些变现的商业模式,什么产品适合抖音?做抖音都需要投入什么? 快抖创客,是国内首家以"短视频红人对接. ...

  4. 原来“抖商大会”和抖音没有关系!抖音起诉“抖商大会”主办方 索赔300万

    近年来,随着抖音等一系列短视频软件在全国范围内的火爆,带动了全民短视频的风潮.抖音还进军了海外,在海外市场也有不小的影响力,给今日头条打了一场漂亮的胜仗,也是字节跳动最为成功的产品之一. 图片来源于网 ...

  5. 一台服务器控制上百个抖音账号,怎么批量管理上百个抖音,抖音mcn一键高效运营软件...

    原标题:怎么批量管理上百个抖音,抖音mcn一键高效运营软件 易媒助手:文章.短视频同时分发软件 正因为憧憬收获更喜人的广告分成,通常个人选择性注册秒拍.皮皮虾等10多个热门内容平台,如果你们只同步文章 ...

  6. 抖音企业号抖音智能营销系统源码待开发技术。。。。。

    抖音企业号抖音智能营销系统源码待开发技术:Symbol值通过Symbol函数生成.这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型.凡是属性名属于Sy ...

  7. 学计算机音视频教程,抖音短视频VIP教程全套合集

    目录: 第01章-认知篇 01-抖音引流和变现的价值所在.mp4 02-抖音平台分析和人群分析.mp4 03-抖音流量人群的带货购买力分析.mp4 04-抖音经典营销 爆款打造案例分析.mp4 05- ...

  8. python爬虫抖音音浪_爬虫抖音_抖音淘宝联盟入驻条件

    如果你刚开始操作抖音,运营抖音还不懂平台的操作技巧,可以加我的微信:422591055 带你玩转抖音自媒体平台,我还联合了抖音运营的几位大佬,每日分享免费的抖音运营的实操讲解,还可以免费获取到抖音运营 ...

  9. 抖音获取抖音商品原数据 API 返回值说明

    今天分享的是抖音获取抖音商品原数据 API 返回值说明: item_get_app-获取抖音商品原数据 [查看演示] onebound.douyin.item_get_app 公共参数: 注册链接(获 ...

  10. 今日分享主题:关于抖音上抖币充值的介绍

    抖音是目前最受欢迎的短视频平台之一,在这个平台上,你可以欣赏到各种类型的视频,从搞笑到音乐,从美妆到美食,从萌宠到旅游,都有大量的视频内容供用户欣赏. 在抖音上,抖币是一种虚拟货币,用户可以用它来购买 ...

最新文章

  1. 实战:基于技术分析的Python算法交易
  2. 爱立信与SK电讯等开展5G测试 将加强VR/AR及云服务连接速度
  3. linux之sed命令n,N,d,D,p,P,h,H,g,G,x解析
  4. 数据库基础知识——MySQL服务的启动和停止
  5. 关于CSS与HTML知识点总结(二)
  6. PWA进阶:Service Worker一问一答
  7. 【vs调试】PDB 文件:每个开发人员都必须知道的
  8. Kali [masscan]端口扫描
  9. 标准输入输出 stdio 流缓冲 buffering in standard streams
  10. python opencv二值化阈值图像分割
  11. UAT,(user acceptance Test),用户接受度测试 标准步骤
  12. 你想要的宏基因组-微生物组知识全在这(19国庆特别篇)
  13. 学计算机物理去戴维斯还是伦斯勒理工学院好,去伦斯勒理工学院留学,优势竟然这么多...
  14. 逐鹿战神--ios技术支持
  15. python自动化操作浏览器
  16. numpy.insert用法以及内插插0的方法
  17. JavaScript实现动态添加的元素添加点击事件
  18. 2019 拼多多校招第三题sum 服务端研发工程师
  19. kafka连接mysql数据库,Kafka-connect-jdbc-source连接mysql数据库实战
  20. 夏天吃西瓜10大禁忌必须知道

热门文章

  1. 笔记本加装内存条,更换散热风扇(以联想y7000为例)
  2. 国庆,几家欢喜几家愁
  3. java 字符串转换成map_java中string类型转换成map
  4. 渗透测试安全检测漏洞
  5. 《统计学习方法》——隐马尔可夫模型(上)
  6. “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”
  7. 思杰desktop7.6申请90天试用的License
  8. GML、SGML、HTML、XML、XHTML、HTML5
  9. SAP报错:交易码 MWS 会计科目表 XXX 没有在表 T030K 中定义
  10. 与苹果和谷歌抗争堡垒创造者发动了远征