package com.github.jdsjlzx.progressindicator.indicators;
import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import com.github.jdsjlzx.progressindicator.Indicator;
import java.util.ArrayList;
/**
* Created by Jack on 2015/10/17.
*/
public class BallRotateIndicator extends Indicator {
float scaleFloat=0.5f;
float degress;
private Matrix mMatrix;
public BallRotateIndicator(){
mMatrix=new Matrix();
}
@Override
public void draw(Canvas canvas, Paint paint) {
float radius=getWidth()/10;
float x = getWidth()/ 2;
float y=getHeight()/2;
/*mMatrix.preTranslate(-centerX(), -centerY());
mMatrix.preRotate(degress,centerX(),centerY());
mMatrix.postTranslate(centerX(), centerY());
canvas.concat(mMatrix);*/
canvas.rotate(degress,centerX(),centerY());
canvas.save();
canvas.translate(x - radius * 2 - radius, y);
canvas.scale(scaleFloat, scaleFloat);
canvas.drawCircle(0, 0, radius, paint);
canvas.restore();
canvas.save();
canvas.translate(x, y);
canvas.scale(scaleFloat, scaleFloat);
canvas.drawCircle(0, 0, radius, paint);
canvas.restore();
canvas.save();
canvas.translate(x + radius * 2 + radius, y);
canvas.scale(scaleFloat, scaleFloat);
canvas.drawCircle(0,0,radius, paint);
canvas.restore();
}
@Override
public ArrayList<ValueAnimator> onCreateAnimators() {
ArrayList<ValueAnimator> animators=new ArrayList<>();
ValueAnimator scaleAnim= ValueAnimator.ofFloat(0.5f,1,0.5f);
scaleAnim.setDuration(1000);
scaleAnim.setRepeatCount(-1);
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
scaleFloat = (float) animation.getAnimatedValue();
postInvalidate();
}
});
ValueAnimator rotateAnim= ValueAnimator.ofFloat(0,180,360);
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
degress = (float) animation.getAnimatedValue();
postInvalidate();
}
});
rotateAnim.setDuration(1000);
rotateAnim.setRepeatCount(-1);
animators.add(scaleAnim);
animators.add(rotateAnim);
return animators;
}
}