Android使用ValueAnimator实现图片粉碎特效
效果图如下:
-
效果看起来还是比较酷炫的,其实实现起来也很简单,主要分三步:
- 将图片中的每一个像素信息保存并绘制在屏幕上
- 设置属性动画,动画update中,更新每一个像素的位置信息,并重新绘制
- 设置View的点击事件,触发动画
保存像素信息
我们这里需要让破碎后的粒子做水平、垂直方向的初速度不同的自由落体运动,所以需要保存每一个粒子的颜色值、坐标及X、Y方向上的速度等。
Ball.java
public class Ball {
public int color; // 图片像素点颜色值
public float x; // 粒子圆心坐标x
public float y;// 粒子圆心坐标y
public float r;// 粒子半径
public float vX;// 粒子水平速度
public float vY;// 粒子垂直速度
public float aX;// 粒子水平加速度
public float aY;// 粒子垂直加速度
}
接下来需要将图片中的所有像素信息映射成一个Ball对象。
我们通过自定义View来实现效果:
public class SplitView extends View {
//保存每一个像素对应的Ball对象
private List<Ball> mBalls = new ArrayList<>();
//用来绘制的画笔
private Paint mPaint;
//每一个粒子的直径
//该参数控制原来每一个像素点在屏幕上的缩放比例,此时为放大两倍
private int d = 2;
public SplitView(Context context) {
this(context, null);
}
public SplitView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SplitView(Context context