java 特效_Android仿抖音双击点赞特效 java实现
实现思路
首先分析该特效的实现思路和具体的表现。在抖音中短视频的播放界面,无论双击屏幕的无其他控件的位置都能够触发双击点赞的特效,因此这是一个自定义布局实现。其次,在双击完后会有一个心形产生并飘动,所以这里是一个动态添加控件并为控件添加动画的过程。
实现代码
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实现相关推荐
- 多图弹出最后变成心形html,【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)...
效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...
- 仿抖音短视频源码,高仿抖音双击点赞效果之双击的问题
仿抖音短视频源码中,实现仿抖音的双击点赞效果,相关代码如下: public class MyView extends View {private GestureDetector gestureDete ...
- Android自定义view之实现仿抖音双击点赞单击暂停特效
2018年抖音.快手.火山等短视频App比较火,最近自己做短视频项目时有个需求,就是类似抖音的点赞特效,单击屏幕时视频暂停,再次点击时视频恢复播放,双击或者连续多次点击时出现点赞特效(飘小心心特效), ...
- pythoni屏幕连点_【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...
- 【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...
- Flutter组件:仿抖音双击点赞弹出爱心效果
效果 简介 仿抖音点赞手势,单击暂停,双击点赞,可连续点击添加多个爱心,特点如下 全部效果为代码绘制(爱心图标来自Material Icon的图标) 套上在目标Widget外即可使用 提供单击与点赞的 ...
- Android仿抖音双击点赞动画,Android仿抖音点击效果
原标题:Android仿抖音点击效果 作者丨wish_xy https://www.jianshu.com/p/1d17c38a3db1 学习自定义view,想找点东西耍一下,刚好看到抖音的点赞效果不 ...
- Android 高仿抖音双击点赞效果
最近遇到一个需求模仿抖音点赞效果 废话不多说,直接上代码 自定义一个view 在布局中引用它就可以 public class Love extends RelativeLayout { pr ...
- html5点赞仿抖音,仿抖音之——点赞动画
我这里做的是一个仿抖音点赞的动画,监听双击事件,在双击位置添加图片,对其进行一系列的缩放.移动.旋转.透明度的动画从而达到效果. 效果图: 制作思路: 1.将该ViewGroup的事件通过touch方 ...
最新文章
- 在不影响配置下,清除netscreen密码
- 粘贴铜箔高频实验板-简易电报发射机实验
- C#进阶系列——WebApi 跨域问题解决方案:CORS
- str.endswith可以传入集合数据类型,而不仅仅是字符串
- 汽车电子专业知识篇(三)-双目视觉三大应用视觉深度、标定、立体匹配
- 地灾应急暨地灾危险性评估培训班学习笔记
- 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
- Zookeeper的集群架构以及读写原理
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
- 计算机科学与技术的应用图,安徽农业大学计算机科学与技术视图及其应用.ppt...
- 网络编程:UDP的socket编程(Linux)
- delphi android 升级,delphi android 自动升级
- 1072. 开学寄语
- Android应用开发实战-保活组件
- html输入密码访问指定页面,三种方法使HTML单页面输入密码才能访问
- 复习笔记:数据库编程题
- 记录 activity onStop、onDestroy 延迟调用问题解决过程
- node安装指定版本 (LTS 长期稳定版本,Current 最新版本)
- 通过Java实现求水仙花数
- WK2212\WK2204\WK2168\WK2132\WK2124\WK2114 UART扩展4个增强UART