先上效果图:
控件可以根据颜色数组的长度来绘制不同数量的小球。小球旋转同时,距控件中心的距离也跟着不断变化。
还有个小细节就是,小球的颜色也会随着变化(颜色变为后一个小球的颜色)。
一、自定义控件的属性
定义了小球的半径、小球偏移控件中心的最大距离和最小距离、动画的执行周期(决定旋转的速度)和一个存放各个颜色的数组(int 数组)。
<declare-styleable name="CircleLoadingView">
<attr name="radius" format="dimension"/>
<attr name="maxOffset" format="dimension"/>
<attr name="minOffset" format="dimension"/>
<attr name="colors" format="reference"/>
<attr name="duration" format="integer"/>
</declare-styleable>
二、自定义动画控件
package com.cxmscb.cxm.circleloadingview;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Build;
import android.support.v4.view.animation.LinearOutSlowInInterpolator;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AnticipateInterpolator;
import android.view.animation.BounceInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import java.util.ArrayList;
import java.util.Collection;
/**
* Created by cxm on 2016/9/24.
*/
public class CircleLoadingView extends View {
private int centerX; // 控件x轴的中心
private int centerY; // 控件y轴的中心
private int radius; // 小球的半径
private int[] colors; // 颜色数组
private int maxOffset ; // 小球偏移的最大值
private in