如图
splash.gif
思路分析
过程拆分
1.画6个小圆圈
2.小圆圈转动起来
3.小圆圈聚合
4.开始扩散
首先确定6个圆的坐标,画出小圆,圆要转动,就是要同步改变每个小圆的坐标,小圆的运动轨迹是个圆。所以使用属性动画,属性动画的变化区别设置为0-2π,然后使用勾股定律求出旋转的圆心坐标,重绘。就能实现旋转效果了。然后只要改变这个大圆的半径就能实现聚合效果。最后扩散效果这个思路就很sao,就是画一个圆,画笔的style设置成STROKE,只要改变Stroke的宽度就行了。是不是很简单。
思路都有了开始撸码
public class SplashView extends View {
//小圆半径
private int smallCircleRadius = 20;
//大圆半径
private int bigCircleRadius = 100;
//小圆画笔
private Paint mPaintSmallCircle;
//小圆颜色
private int[] colorsCircle;
//小圆之间的角度
private float angle;
//属性动画旋转角度
private float scaleAngle;
//属性动画变化半径
private int scaleRadiu;
private SlpashState drawState;
//屏幕对角线的一半
private float expandRadius;
//扩散画笔
private Paint mPaintExpand;
private float mPaintExpandMove;
public SplashView(Context context) {
this(context, null);
}
public SplashView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
colorsCircle =