博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画
阅读量:5956 次
发布时间:2019-06-19

本文共 3224 字,大约阅读时间需要 10 分钟。

一个优美炫酷的点赞效果

效果图如下:

攻克难点:

  • 心形图片的路径等走向
  • 心形图片的控制范围

部分代码如下:

通过AbstractPathAnimator定义飘心动画控制器

@Override    public void start(final View child, final ViewGroup parent) {        parent.addView(child, new ViewGroup.LayoutParams(mConfig.heartWidth, mConfig.heartHeight));        FloatAnimation anim = new FloatAnimation(createPath(mCounter, parent, 2), randomRotation(), parent, child);        anim.setDuration(mConfig.animDuration);        anim.setInterpolator(new LinearInterpolator());//启动动画        anim.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationEnd(Animation animation) {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        parent.removeView(child);                    }                });                mCounter.decrementAndGet();            }            @Override            public void onAnimationRepeat(Animation animation) {            }            @Override            public void onAnimationStart(Animation animation) {                mCounter.incrementAndGet();            }        });        anim.setInterpolator(new LinearInterpolator());        child.startAnimation(anim);    }复制代码
/**     * 根据图片设置bitmap     * @param color     * @return     */    public Bitmap createHeart(int color) {        if (sHeart == null) {            sHeart = BitmapFactory.decodeResource(getResources(), mHeartResId);        }        if (sHeartBorder == null) {            sHeartBorder = BitmapFactory.decodeResource(getResources(), mHeartBorderResId);        }        Bitmap heart = sHeart;        Bitmap heartBorder = sHeartBorder;        Bitmap bm = createBitmapSafely(heartBorder.getWidth(), heartBorder.getHeight());        if (bm == null) {            return null;        }        Canvas canvas = sCanvas;        canvas.setBitmap(bm);        Paint p = sPaint;        canvas.drawBitmap(heartBorder, 0, 0, p);        p.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP));        float dx = (heartBorder.getWidth() - heart.getWidth()) / 2f;        float dy = (heartBorder.getHeight() - heart.getHeight()) / 2f;        canvas.drawBitmap(heart, dx, dy, p);        p.setColorFilter(null);        canvas.setBitmap(null);        return bm;    }复制代码

如何创建一个path

public Path createPath(AtomicInteger counter, View view, int factor) {        Random r = mRandom;        int x = r.nextInt(mConfig.xRand);        int x2 = r.nextInt(mConfig.xRand);        int y = view.getHeight() - mConfig.initY;        int y2 = counter.intValue() * 15 + mConfig.animLength * factor + r.nextInt(mConfig.animLengthRand);        factor = y2 / mConfig.bezierFactor;        //随机xPoint        int xPointFactor = mRandom.nextInt(mConfig.xPointFactor);        x = xPointFactor + x;        x2 = xPointFactor + x2;        int y3 = y - y2;        y2 = y - y2 / 2;        Path p = new Path();        p.moveTo(mConfig.initX, y);        p.cubicTo(mConfig.initX, y - factor, x, y2 + factor, x, y2);        p.moveTo(x, y2);        p.cubicTo(x, y2 - factor, x2, y3 + factor, x2, y3);        return p;    }复制代码

Activity中代码:

项目地址:

更多文章

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :644196190

微信公众号:终端研发部

技术+职场

转载地址:http://vurxx.baihongyu.com/

你可能感兴趣的文章
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
【查找算法】基于存储的查找算法(哈希查找)
查看>>
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>
记录一下这次web实训的两个网站
查看>>
POJ-1830 开关问题 高斯消元
查看>>
做程序开发的你如果经常用Redis,这些问题肯定会遇到
查看>>
006android初级篇之jni数据类型映射
查看>>
Java 集合框架查阅技巧
查看>>
apache配置虚拟主机
查看>>
CollectionView水平和竖直瀑布流的实现
查看>>
前端知识复习一(css)
查看>>
spark集群启动步骤及web ui查看
查看>>
利用WCF改进文件流传输的三种方式
查看>>
Spring学习总结(2)——Spring的常用注解
查看>>
关于IT行业人员吃的都是青春饭?[透彻讲解]
查看>>
钱到用时方恨少(随记)
查看>>
mybatis主键返回的实现
查看>>
org.openqa.selenium.StaleElementReferenceException
查看>>
数论之 莫比乌斯函数
查看>>