最近遇到一个需求模仿抖音点赞效果  废话不多说,直接上代码

自定义一个view 在布局中引用它就可以

public class Love extends RelativeLayout {
    private Context mContext;
    float[] num = {-30, -20, 0, 20, 30};//随机心形图片角度

public Love(Context context) {
        super(context);
        initView(context);
    }

public Love(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

public Love(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

private void initView(Context context) {
        mContext = context;
    }

@Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        ImageView imageView = new ImageView(mContext);
        LayoutParams params = new LayoutParams(100, 100);
        params.leftMargin = getWidth() - 200;
        params.topMargin = getHeight() / 2 - 300;
        imageView.setImageDrawable(getResources().getDrawable(R.drawable.heart_red));
        imageView.setLayoutParams(params);
        addView(imageView);

imageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "这里是点击爱心的动画,待展示", Toast.LENGTH_SHORT).show();
            }
        });
    }

@Override
    public boolean onTouchEvent(MotionEvent event) {

final ImageView imageView = new ImageView(mContext);
        LayoutParams params = new LayoutParams(300, 300);
        params.leftMargin = (int) event.getX() - 150;
        params.topMargin = (int) event.getY() - 300;
        imageView.setImageDrawable(getResources().getDrawable(R.drawable.heart_red));
        imageView.setLayoutParams(params);
        addView(imageView);

AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.play(scale(imageView, "scaleX", 2f, 0.9f, 100, 0))
                .with(scale(imageView, "scaleY", 2f, 0.9f, 100, 0))
                .with(rotation(imageView, 0, 0, num[new Random().nextInt(4)]))
                .with(alpha(imageView, 0, 1, 100, 0))
                .with(scale(imageView, "scaleX", 0.9f, 1, 50, 150))
                .with(scale(imageView, "scaleY", 0.9f, 1, 50, 150))
                .with(translationY(imageView, 0, -600, 800, 400))
                .with(alpha(imageView, 1, 0, 300, 400))
                .with(scale(imageView, "scaleX", 1, 3f, 700, 400))
                .with(scale(imageView, "scaleY", 1, 3f, 700, 400));

animatorSet.start();
        animatorSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                removeViewInLayout(imageView);
            }
        });
        return super.onTouchEvent(event);
    }

public static ObjectAnimator scale(View view, String propertyName, float from, float to, long time, long delayTime) {
        ObjectAnimator translation = ObjectAnimator.ofFloat(view
                , propertyName
                , from, to);
        translation.setInterpolator(new LinearInterpolator());
        translation.setStartDelay(delayTime);
        translation.setDuration(time);
        return translation;
    }

public static ObjectAnimator translationX(View view, float from, float to, long time, long delayTime) {
        ObjectAnimator translation = ObjectAnimator.ofFloat(view
                , "translationX"
                , from, to);
        translation.setInterpolator(new LinearInterpolator());
        translation.setStartDelay(delayTime);
        translation.setDuration(time);
        return translation;
    }

public static ObjectAnimator translationY(View view, float from, float to, long time, long delayTime) {
        ObjectAnimator translation = ObjectAnimator.ofFloat(view
                , "translationY"
                , from, to);
        translation.setInterpolator(new LinearInterpolator());
        translation.setStartDelay(delayTime);
        translation.setDuration(time);
        return translation;
    }

public static ObjectAnimator alpha(View view, float from, float to, long time, long delayTime) {
        ObjectAnimator translation = ObjectAnimator.ofFloat(view
                , "alpha"
                , from, to);
        translation.setInterpolator(new LinearInterpolator());
        translation.setStartDelay(delayTime);
        translation.setDuration(time);
        return translation;
    }

public static ObjectAnimator rotation(View view, long time, long delayTime, float... values) {
        ObjectAnimator rotation = ObjectAnimator.ofFloat(view, "rotation", values);
        rotation.setDuration(time);
        rotation.setStartDelay(delayTime);
        rotation.setInterpolator(new TimeInterpolator() {
            @Override
            public float getInterpolation(float input) {
                return input;
            }
        });
        return rotation;
    }
    }

Android 高仿抖音双击点赞效果相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Android高仿抖音滚动聊天,Android仿抖音列表效果

    本文实例为大家分享了Android仿抖音列表效果的具体代码,供大家参考,具体内容如下 当下抖音非常火热,是不是也很心动做一个类似的app吗? 那我们就用RecyclerView实现这个功能吧,关于内存 ...

  9. android 高仿抖音界面,2018-11-05 Android 仿抖音选择封面自定义控件

    写在前头,抖音里面很多控件,效果很不错,但是,Android 跟iOS的表现形式以及实现方式,都是有区别的,这里实现Android左右拖拉控件进行视频封面选择. public class Choice ...

最新文章

  1. ksql 数量大于2_504深入解读路基土石方说明,路基填方数量组成?运距>15km咋办...
  2. 最新maven插件的安装
  3. lucky number
  4. android系统五大布局,android 五大布局文件
  5. LeetCode 1033. 移动石子直到连续
  6. python自动拨号_Python自动连接ssh的方法
  7. linux创建文件结构体,Linux file 结构体和 inode 结构体,Go语言入门技术,Go语言基础...
  8. mysql 创建索引 终止_技术分享 | 常见索引问题处理
  9. 【面试】面试文章积累
  10. MySQL中时间函数NOW()和SYSDATE()的区别
  11. 突发!Intel CEO 换帅,VMware CEO 将走马上任
  12. equals()重写之后为什么要重写hashCode()方法
  13. 刷新include引进的页面
  14. java 全选 反选取值_全选反选以及获取选中的数据
  15. Emacs设置侧边栏目录neotree
  16. python blp模型 估计_简述BLP模型
  17. Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
  18. Rect 和 Bounds
  19. Redis主从复制(Master/Slaver)初级
  20. 5G无线网络关键技术

热门文章

  1. Emit学习之旅(1):Emit概览
  2. cephfs mds多活设置
  3. 现实很残酷——我没能成为你喜欢的那只“猫”
  4. CVE-2016-2183
  5. 【云和恩墨大讲堂】李华 - 故障分析:library cache latch竞争案例分享
  6. 如何做好 IT 项目管理?做好项目管理常用的9大项目管理平台、7大管理方法
  7. 有哪些适合程序员看的网站?
  8. Haproxy部署网站LB集群
  9. 数据结构作业--计算器(用中缀表达式实现表达式树)
  10. 亚马逊品牌推广视频被拒,到底是为什么?