/**
* @description:
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年5月18日 下午4:12:39
* @version 1.0
*/
package com.csq.thesceneryalong.ui.dialogs;
import android.content.Context;
import android.widget.TextView;
import com.csq.thesceneryalong.R;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.Animator.AnimatorListener;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.animation.ValueAnimator;
import com.nineoldandroids.animation.ValueAnimator.AnimatorUpdateListener;
import de.passsy.holocircularprogressbar.HoloCircularProgressBar;
public class ProgressLoadingDialog extends BaseFullScreenDialog {
// ------------------------ Constants ------------------------
// ------------------------- Fields --------------------------
private HoloCircularProgressBar progressBar;
protected boolean mAnimationHasEnded = false;
private ObjectAnimator mProgressBarAnimator;
private TextView tvProgress, tvMsg;
// ----------------------- Constructors ----------------------
public ProgressLoadingDialog(Context context, String msg) {
super(context);
// TODO Auto-generated constructor stub
initView(msg);
}
private void initView(String msg){
setContentView(R.layout.dialog_progress_loading);
progressBar = (HoloCircularProgressBar) findViewById(R.id.holoCircularProgressBar);
tvProgress = (TextView) findViewById(R.id.tvProgress);
tvMsg = (TextView) findViewById(R.id.tvMsg);
tvProgress.setText("");
tvMsg.setText(msg);
}
// -------- Methods for/from SuperClass/Interfaces -----------
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
animate(progressBar, new AnimatorListener() {
@Override
public void onAnimationCancel(final Animator animation) {
animation.end();
}
@Override
public void onAnimationEnd(final Animator animation) {
if (!mAnimationHasEnded) {
animate(progressBar, this);
} else {
mAnimationHasEnded = false;
}
}
@Override
public void onAnimationRepeat(final Animator animation) {
}
@Override
public void onAnimationStart(final Animator animation) {
}
});
}
@Override
public void onDetachedFromWindow() {
// TODO Auto-generated method stub
super.onDetachedFromWindow();
mAnimationHasEnded = true;
mProgressBarAnimator.cancel();
}
// --------------------- Methods public ----------------------
public void updataMsg(String msg){
tvMsg.setText(msg);
}
public void updataProgress(int progress){
tvProgress.setText(progress + " %");
}
// --------------------- Methods private ---------------------
/**
* Animate.
*
* @param progressBar
* the progress bar
* @param listener
* the listener
*/
private void animate(final HoloCircularProgressBar progressBar, final AnimatorListener listener) {
final float progress = (float) (Math.random() * 2);
int duration = 3000;
animate(progressBar, listener, progress, duration);
}
private void animate(final HoloCircularProgressBar progressBar, final AnimatorListener listener,
final float progress, final int duration) {
mProgressBarAnimator = ObjectAnimator.ofFloat(progressBar, "progress", progress);
mProgressBarAnimator.setDuration(duration);
mProgressBarAnimator.addListener(new AnimatorListener() {
@Override
public void onAnimationCancel(final Animator animation) {
}
@Override
public void onAnimationEnd(final Animator animation) {
progressBar.setProgress(progress);
}
@Override
public void onAnimationRepeat(final Animator animation) {
}
@Override
public void onAnimationStart(final Animator animation) {
}
});
if (listener != null) {
mProgressBarAnimator.addListener(listener);
}
mProgressBarAnimator.reverse();
mProgressBarAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(final ValueAnimator animation) {
progressBar.setProgress((Float) animation.getAnimatedValue());
}
});
progressBar.setMarkerProgress(progress);
mProgressBarAnimator.start();
}
// --------------------- Getter & Setter ---------------------
// --------------- Inner and Anonymous Classes ---------------
}