package com.github.jdsjlzx.progressindicator.indicators;
import android.animation.ValueAnimator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.animation.LinearInterpolator;
import com.github.jdsjlzx.progressindicator.Indicator;
import java.util.ArrayList;
/**
* Created by Jack on 2015/10/18.
*/
public class CubeTransitionIndicator extends Indicator {
float[] translateX=new float[2],translateY=new float[2];
float degrees,scaleFloat=1.0f;
@Override
public void draw(Canvas canvas, Paint paint) {
float rWidth=getWidth()/5;
float rHeight=getHeight()/5;
for (int i = 0; i < 2; i++) {
canvas.save();
canvas.translate(translateX[i], translateY[i]);
canvas.rotate(degrees);
canvas.scale(scaleFloat,scaleFloat);
RectF rectF=new RectF(-rWidth/2,-rHeight/2,rWidth/2,rHeight/2);
canvas.drawRect(rectF,paint);
canvas.restore();
}
}
@Override
public ArrayList<ValueAnimator> onCreateAnimators() {
ArrayList<ValueAnimator> animators=new ArrayList<>();
float startX=getWidth()/5;
float startY=getHeight()/5;
for (int i = 0; i < 2; i++) {
final int index=i;
translateX[index]=startX;
ValueAnimator translationXAnim= ValueAnimator.ofFloat(startX,getWidth()-startX,getWidth()-startX, startX,startX);
if (i==1){
translationXAnim= ValueAnimator.ofFloat(getWidth()-startX,startX,startX, getWidth()-startX,getWidth()-startX);
}
translationXAnim.setInterpolator(new LinearInterpolator());
translationXAnim.setDuration(1600);
translationXAnim.setRepeatCount(-1);
translationXAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
translateX[index] = (float) animation.getAnimatedValue();
postInvalidate();
}
});
translateY[index]=startY;
ValueAnimator translationYAnim= ValueAnimator.ofFloat(startY,startY,getHeight()-startY,getHeight()- startY,startY);
if (i==1){
translationYAnim= ValueAnimator.ofFloat(getHeight()-startY,getHeight()-startY,startY,startY,getHeight()-startY);
}
translationYAnim.setDuration(1600);
translationYAnim.setInterpolator(new LinearInterpolator());
translationYAnim.setRepeatCount(-1);
addUpdateListener(translationYAnim,new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
translateY[index] = (float) animation.getAnimatedValue();
postInvalidate();
}
});
animators.add(translationXAnim);
animators.add(translationYAnim);
}
ValueAnimator scaleAnim= ValueAnimator.ofFloat(1,0.5f,1,0.5f,1);
scaleAnim.setDuration(1600);
scaleAnim.setInterpolator(new LinearInterpolator());
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,1.5f*360,2*360);
rotateAnim.setDuration(1600);
rotateAnim.setInterpolator(new LinearInterpolator());
rotateAnim.setRepeatCount(-1);
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
degrees = (float) animation.getAnimatedValue();
postInvalidate();
}
});
animators.add(scaleAnim);
animators.add(rotateAnim);
return animators;
}
}