package com.gc.materialdesign.views; import android.content.Context; import android.util.AttributeSet; import com.nineoldandroids.animation.Animator; import com.nineoldandroids.animation.Animator.AnimatorListener; import com.nineoldandroids.animation.ObjectAnimator; import com.nineoldandroids.view.ViewHelper; public class ProgressBarIndeterminateDeterminate extends ProgressBarDeterminate { boolean firstProgress = true; boolean runAnimation = true; ObjectAnimator animation; public ProgressBarIndeterminateDeterminate(Context context, AttributeSet attrs) { super(context, attrs); post(new Runnable() { @Override public void run() { // Make progress animation setProgress(60); ViewHelper.setX(progressView, getWidth() + progressView.getWidth() / 2); animation = ObjectAnimator.ofFloat(progressView, "x", -progressView.getWidth() / 2); animation.setDuration(1200); animation.addListener(new AnimatorListener() { int cont = 1; int suma = 1; int duration = 1200; public void onAnimationEnd(Animator arg0) { // Repeat animation if (runAnimation) { ViewHelper.setX(progressView, getWidth() + progressView.getWidth() / 2); cont += suma; animation = ObjectAnimator.ofFloat(progressView, "x", -progressView.getWidth() / 2); animation.setDuration(duration / cont); animation.addListener(this); animation.start(); if (cont == 3 || cont == 1) suma *= -1; } } public void onAnimationStart(Animator arg0) { } public void onAnimationRepeat(Animator arg0) { } public void onAnimationCancel(Animator arg0) { } }); animation.start(); } }); } @Override public void setProgress(int progress) { if (firstProgress) { firstProgress = false; } else { stopIndeterminate(); } super.setProgress(progress); } /** * Stop indeterminate animation to convert view in determinate progress bar */ private void stopIndeterminate() { animation.cancel(); ViewHelper.setX(progressView, 0); runAnimation = false; } }