实现思路

首先分析该特效的实现思路和具体的表现。在抖音中短视频的播放界面,无论双击屏幕的无其他控件的位置都能够触发双击点赞的特效,因此这是一个自定义布局实现。其次,在双击完后会有一个心形产生并飘动,所以这里是一个动态添加控件并为控件添加动画的过程。

实现代码

public class LoveView extends RelativeLayout {

private OnCallBack onCallBack;

private Context context;

private float[] num = new float[]{-35f, -25f, 0f, 25f, 35f};

private long[] mHits = new long[2];

public LoveView(Context context) {

this(context,null);

}

public LoveView(Context context, AttributeSet attrs) {

this(context, attrs,0);

}

public LoveView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.context = context;

}

//监听点击事件

@Override

public boolean onTouchEvent(MotionEvent event) {

System.arraycopy(mHits,1, mHits,0,mHits.length - 1);

mHits[mHits.length-1] = SystemClock.uptimeMillis();

if (mHits[0] >= (SystemClock.uptimeMillis() - 200)){

final ImageView imageView = new ImageView(context);

//在事件产生的坐标处添加心形组件

LayoutParams layoutParams = new LayoutParams(300,300);

layoutParams.leftMargin = (int)(event.getX()-150);

layoutParams.topMargin = (int)(event.getY()-300);

imageView.setImageDrawable(getResources().getDrawable(R.mipmap.icon_home_like_after));

imageView.setLayoutParams(layoutParams);

imageView.bringToFront();

addView(imageView);

//为组件添加动画

AnimatorSet animatorSet = new AnimatorSet();

animatorSet.play(//缩放动画,X轴2倍缩小至0.9倍

scaleAni(imageView, "scaleX", 2f, 0.9f, 100L, 0L))

//缩放动画,Y轴2倍缩放至0.9倍

.with(scaleAni(imageView, "scaleY", 2f, 0.9f, 100l, 0l))

//旋转动画,随机旋转角

.with(rotation(imageView, 0l, 0l, num[new Random().nextInt(4)]))

//渐变透明动画,透明度从0-1

.with(alphaAni(imageView, 0F, 1F, 100l, 0L))

//缩放动画,X轴0.9倍缩小至

.with(scaleAni(imageView, "scaleX", 0.9f, 1F, 50L, 150L))

//缩放动画,Y轴0.9倍缩放至

.with(scaleAni(imageView, "scaleY", 0.9f, 1F, 50L, 150L))

//位移动画,Y轴从0上移至600

.with(translationY(imageView, 0F, -600F, 800L, 400L))

//透明动画,从1-0

.with(alphaAni(imageView, 1F, 0F, 300L, 400L))

//缩放动画,X轴1至3倍

.with(scaleAni(imageView, "scaleX", 1F, 3f, 700L, 400L))

//缩放动画,Y轴1至3倍

.with(scaleAni(imageView, "scaleY", 1F, 3f, 700L, 400L));

animatorSet.start();

animatorSet.addListener(new AnimatorListenerAdapter(){

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

removeViewInLayout(imageView);

}

});

if (onCallBack!=null){

onCallBack.callback();

}

}

return super.onTouchEvent(event);

}

private ObjectAnimator scaleAni(View view,String propertyName,Float from,Float to ,Long time,Long delay){

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, propertyName, from, to);

objectAnimator.setInterpolator(new LinearInterpolator());

objectAnimator.setStartDelay(delay);

objectAnimator.setDuration(time);

return objectAnimator;

}

private ObjectAnimator translationX(View view,Float from,Float to,Long time, Long delayTime){

ObjectAnimator ani = ObjectAnimator.ofFloat(view, "translationX", from, to);

ani.setInterpolator(new LinearInterpolator());

ani.setStartDelay(delayTime);

ani.setDuration(time);

return ani;

}

private ObjectAnimator translationY(View view, Float from, Float to, Long time,Long delayTime){

ObjectAnimator ani = ObjectAnimator.ofFloat(view, "translationY", from, to);

ani.setInterpolator(new LinearInterpolator());

ani.setStartDelay(delayTime);

ani.setDuration(time);

return ani;

}

private ObjectAnimator alphaAni(View view,Float from,Float to,Long time,Long delayTime){

ObjectAnimator ani = ObjectAnimator.ofFloat(view, "alpha", from, to);

ani.setInterpolator(new LinearInterpolator());

ani.setStartDelay(delayTime);

ani.setDuration(time);

return ani;

}

private ObjectAnimator rotation(View view,Long time,Long delayTime,Float values){

ObjectAnimator ani = ObjectAnimator.ofFloat(view, "rotation",values);

ani.setInterpolator(new TimeInterpolator() {

@Override

public float getInterpolation(float input) {

return 0;

}

});

ani.setStartDelay(delayTime);

ani.setDuration(time);

return ani;

}

public void setCallBack(OnCallBack onCallBack){

this.onCallBack = onCallBack;

}

public interface OnCallBack{

void callback();

}

}

java 特效_Android仿抖音双击点赞特效 java实现相关推荐

  1. 多图弹出最后变成心形html,【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)...

    效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...

  2. 仿抖音短视频源码,高仿抖音双击点赞效果之双击的问题

    仿抖音短视频源码中,实现仿抖音的双击点赞效果,相关代码如下: public class MyView extends View {private GestureDetector gestureDete ...

  3. Android自定义view之实现仿抖音双击点赞单击暂停特效

    2018年抖音.快手.火山等短视频App比较火,最近自己做短视频项目时有个需求,就是类似抖音的点赞特效,单击屏幕时视频暂停,再次点击时视频恢复播放,双击或者连续多次点击时出现点赞特效(飘小心心特效), ...

  4. pythoni屏幕连点_【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)

    效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...

  5. 【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)

    效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...

  6. Flutter组件:仿抖音双击点赞弹出爱心效果

    效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...

  7. Android仿抖音双击点赞动画,Android仿抖音点击效果

    原标题:Android仿抖音点击效果 作者丨wish_xy https://www.jianshu.com/p/1d17c38a3db1 学习自定义view,想找点东西耍一下,刚好看到抖音的点赞效果不 ...

  8. Android 高仿抖音双击点赞效果

    最近遇到一个需求模仿抖音点赞效果  废话不多说,直接上代码 自定义一个view 在布局中引用它就可以 public class Love extends RelativeLayout {     pr ...

  9. html5点赞仿抖音,仿抖音之——点赞动画

    我这里做的是一个仿抖音点赞的动画,监听双击事件,在双击位置添加图片,对其进行一系列的缩放.移动.旋转.透明度的动画从而达到效果. 效果图: 制作思路: 1.将该ViewGroup的事件通过touch方 ...

最新文章

  1. 在不影响配置下,清除netscreen密码
  2. 粘贴铜箔高频实验板-简易电报发射机实验
  3. C#进阶系列——WebApi 跨域问题解决方案:CORS
  4. str.endswith可以传入集合数据类型,而不仅仅是字符串
  5. 汽车电子专业知识篇(三)-双目视觉三大应用视觉深度、标定、立体匹配
  6. 地灾应急暨地灾危险性评估培训班学习笔记
  7. 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
  8. Zookeeper的集群架构以及读写原理
  9. VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
  10. 计算机科学与技术的应用图,安徽农业大学计算机科学与技术视图及其应用.ppt...
  11. 网络编程:UDP的socket编程(Linux)
  12. delphi android 升级,delphi android 自动升级
  13. 1072. 开学寄语
  14. Android应用开发实战-保活组件
  15. html输入密码访问指定页面,三种方法使HTML单页面输入密码才能访问
  16. 复习笔记:数据库编程题
  17. 记录 activity onStop、onDestroy 延迟调用问题解决过程
  18. node安装指定版本 (LTS 长期稳定版本,Current 最新版本)
  19. 通过Java实现求水仙花数
  20. WK2212\WK2204\WK2168\WK2132\WK2124\WK2114 UART扩展4个增强UART

热门文章

  1. emlog评论ajax,EMLOG全站ajax的主题模板-Faded
  2. AWS CloudFront 介绍及配置
  3. Oracle添加主键和索引,Oracle 添加主键和索引
  4. golang 开发 环境搭建
  5. kubernetes 使用公有云虚机的LB功能配置VIP
  6. Unity2019.3.2f下载
  7. QT三方库 Openssl Des 算法实现
  8. warning LNK4099: PDB 原因及解决方案
  9. python爬虫(一)爬取豆瓣电影排名前50名电影的信息
  10. ExcelVBA之传递参数给一子程序以及如何将值从子程序传递回给主调过程