package com.qmusic.controls.graphy;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.SystemClock;
import android.util.Log;
import com.qmusic.R;
@SuppressLint("NewApi")
public class BDrawable extends Drawable implements Drawable.Callback, Runnable, Animatable {
static final String TAG = BDrawable.class.getSimpleName();
static final int[] ICONS = new int[] { R.drawable.tab1, R.drawable.tab2, R.drawable.tab3 };
Drawable[] drawables;
int currentIndex;
boolean isRunning;
public BDrawable(Context ctx) {
Resources resource = ctx.getResources();
drawables = new Drawable[ICONS.length];
for (int i = 0; i < ICONS.length; i++) {
drawables[i] = new BitmapDrawable(resource, BitmapFactory.decodeResource(resource, ICONS[i]));
}
}
@Override
public void draw(Canvas canvas) {
Log.i(TAG, "draw");
canvas.save();
Drawable d = drawables[currentIndex % drawables.length];
d.draw(canvas);
canvas.restore();
}
@Override
public int getOpacity() {
return 0;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
@Override
protected void onBoundsChange(Rect bounds) {
for (int i = 0; i < drawables.length; i++) {
drawables[i].setBounds(bounds);
}
}
@Override
public void invalidateDrawable(Drawable who) {
Log.i(TAG, "invalidateDrawable");
Callback c = getCallback();
if (c != null) {
c.invalidateDrawable(who);
}
}
@Override
public void scheduleDrawable(Drawable who, Runnable what, long when) {
Log.i(TAG, "scheduleDrawable");
Callback c = getCallback();
if (c != null) {
c.scheduleDrawable(who, what, when);
}
}
@Override
public void unscheduleDrawable(Drawable who, Runnable what) {
Log.i(TAG, "scheduleDrawable");
Callback c = getCallback();
if (c != null) {
c.unscheduleDrawable(who, what);
}
}
@Override
public void run() {
currentIndex++;
scheduleSelf(this, SystemClock.uptimeMillis() + 1000);
invalidateSelf();
}
@Override
public boolean isRunning() {
return isRunning;
}
@Override
public void start() {
if (!isRunning()) {
isRunning = true;
run();
}
}
@Override
public void stop() {
if (isRunning()) {
isRunning = false;
unscheduleSelf(this);
}
}
}