content: package com.rsen.github.loadview.indicator;
  
  import android.animation.Animator;
  import android.animation.ValueAnimator;
  import android.graphics.Canvas;
  import android.graphics.Paint;
  import android.view.animation.LinearInterpolator;
  
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Created by Jack on 2015/10/19.
   */
  public class BallScaleMultipleIndicator extends BaseIndicatorController {
  
      float[] scaleFloats=new float[]{1,1,1};
      int[] alphaInts=new int[]{255,255,255};
  
      @Override
      public void draw(Canvas canvas, Paint paint) {
          float circleSpacing=4;
          for (int i = 0; i < 3; i++) {
              paint.setAlpha(alphaInts[i]);
              canvas.scale(scaleFloats[i],scaleFloats[i],getWidth()/2,getHeight()/2);
              canvas.drawCircle(getWidth()/2,getHeight()/2,getWidth()/2-circleSpacing,paint);
          }
      }
  
      @Override
      public List<Animator> createAnimation() {
          List<Animator> animators=new ArrayList<>();
          long[] delays=new long[]{0, 200, 400};
          for (int i = 0; i < 3; i++) {
              final int index=i;
              ValueAnimator scaleAnim=ValueAnimator.ofFloat(0,1);
              scaleAnim.setInterpolator(new LinearInterpolator());
              scaleAnim.setDuration(1000);
              scaleAnim.setRepeatCount(-1);
              scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                  @Override
                  public void onAnimationUpdate(ValueAnimator animation) {
                      scaleFloats[index] = (float) animation.getAnimatedValue();
                      postInvalidate();
                  }
              });
              scaleAnim.setStartDelay(delays[i]);
              scaleAnim.start();
  
              ValueAnimator alphaAnim=ValueAnimator.ofInt(255,0);
              alphaAnim.setInterpolator(new LinearInterpolator());
              alphaAnim.setDuration(1000);
              alphaAnim.setRepeatCount(-1);
              alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                  @Override
                  public void onAnimationUpdate(ValueAnimator animation) {
                      alphaInts[index] = (int) animation.getAnimatedValue();
                      postInvalidate();
                  }
              });
              scaleAnim.setStartDelay(delays[i]);
              alphaAnim.start();
  
              animators.add(scaleAnim);
              animators.add(alphaAnim);
          }
          return animators;
      }
  
  }
  