【Android效果集】学习ExplosionField之粒子破碎效果

前段时间在某效果网站看到开源项目【ExplosionField】非常喜欢,于是自己跟着源码学习着去做了做。跟源码效果有一点区别,我都是尽力读懂源码然后用自己的理解写出来,源码有些看不懂的地方,我也就没有用到,因为自己的代码要保证自己都能看懂。

最后效果如下:
最终效果图

(本文适合有一年Android开发经验者学习)

本文可以学到:
1.开源项目ExplosionField的实现思路
2.图示效果的实现过程
3.属性动画的用法


实现思路:

1.新建一个 Bean Particle,表示一个粒子对象;新建一个 View ExplosionField作为画布用来显示破碎的粒子;新建一个属性动画(ValueAnimator) ExplosionAnimator用来改变不同时刻的粒子状态;

2.通过View生成图片Bitmap,把生成的图片分解成若干个粒子,让每个粒子记录特定的位置,所有的粒子组合能看出是原图。

3.加上动画效果,使得点击View后,粒子能有所变化。

4.构思算法,形成不一样的效果。

5.匹配不同分辨率的设备。

6.重构。


详细过程:

可以先看看项目结构,非常简单:
这里写图片描述

1.新建对象

1.1 新建Particle对象,用来描述粒子,包括属性有颜色、透明度、圆心坐标、半径。

public class Particle {
    float cx; //center x of circle
    float cy; //center y of circle
    float radius;

    int color;
    float alpha;
}

1.2 新建ExplosionField对象,继承自View,用于做粒子集的画布,需要重写onDraw()方法

public class ExplosionField extends View{
   

    public ExplosionField(Context context) {
        super(context);
        init();
    }

    public ExplosionField(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    private void init() {
       //初始化
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制粒子
    }
}

1.3 新建ExplosionAnimator,继承自ValueAnimator,用来执行自定义动画。ValueAnimator简单来说就是在一段时间内通过不断改变值(一般是改变某个属性的值)来达到动画效果。更多可以参考《Android属性动画完全解析(上),初识属性动画的基本用法》来学习。

而我们现在是准备在一段时间内(大概1.5秒)让ValueAnimator里的值从0.0f变化到1.0f,然后根据系统生成的递增随机值(范围在0.0f~1.0f)改变Particle里的属性值。

public class ExplosionAnimator extends ValueAnimator{
   
    public static final int DEFAULT_DURATION = 1500;

    public ExplosionAnimator() {
        setFloatValues(0.0f, 1.0f);
        setDuration(DEFAULT_DURATION);
    }
}

这样,在1.5秒内,通过ExplosionAnimator的方法getAnimatedValue()就能够不断得到递增的范围在0.0f~1.0f之间的值。

2.复制出View的快照图片

首先通过view的宽高创建出一个同样大小的空白图,用Bitmap的静态方法createBitmap()创建,最后一个参数表示图片质量。

    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);

然后通过画布Canvas,先把空白图设置到画布里,再让view

  • 20
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值