package com.aspsine.swipetoloadlayout.demo.view.drawable.google;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.util.TypedValue;
/**
* Created by Aspsine on 2015/9/11.
*/
public abstract class ProgressDrawable extends Drawable implements Animatable {
/**
* smooth animation requires 60 frame in 1000ms
* We can know fresh 1 frame requires 1000/60 ms
*/
public static final int DELAY = 1000 / 60;
private final Context mContext;
private boolean mRunning;
private Handler mHandler;
private int[] mColors;
public ProgressDrawable(Context context) {
mContext = context;
}
public void setColors(int... colors) {
mColors = colors;
}
public int[] getColors() {
return mColors;
}
public abstract void setPercent(float progress, boolean isUser);
public void setPercent(float progress) {
setPercent(progress, false);
}
public void setRunning(boolean running) {
this.mRunning = running;
}
@Override
public boolean isRunning() {
return mRunning;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
protected Context getContext() {
return mContext;
}
protected void post(Runnable runnable) {
postDelayed(runnable, 0);
}
protected void postDelayed(Runnable runnable, int delayMillis) {
if (mHandler == null) {
synchronized (ProgressDrawable.class) {
mHandler = new Handler(Looper.getMainLooper());
}
}
mHandler.postDelayed(runnable, delayMillis);
}
protected void removeCallBacks(Runnable runnable) {
if (mHandler != null) {
mHandler.removeCallbacks(runnable);
}
}
protected int dp2px(int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getContext().getResources().getDisplayMetrics());
}
}