package com.datdo.mobilib.widget;
import com.datdo.mobilib.util.MblUtils;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.widget.ImageView;
public class MblSequenceImage extends ImageView {
private int mCurrentIndex;
private int[] mImageResIds;
private long mInterval;
private boolean mRepeat;
private MblSequenceImageCallback mCallback;
private static Handler sHandler = new Handler(Looper.getMainLooper());
private Runnable mOnTimerTask = new Runnable() {
@Override
public void run() {
MblUtils.executeOnMainThread(new Runnable() {
@Override
public void run() {
setImageResource(mImageResIds[mCurrentIndex]);
if (mCallback != null) mCallback.onShow(mCurrentIndex);
if (mCurrentIndex == mImageResIds.length-1) {
if (mRepeat) {
if (mCallback != null) mCallback.onReset();
} else {
if (mCallback != null) mCallback.onFinish();
stop();
return;
}
}
mCurrentIndex = (mCurrentIndex+1) % mImageResIds.length;
sHandler.removeCallbacks(mOnTimerTask);
sHandler.postDelayed(mOnTimerTask, mInterval);
}
});
}
};
public MblSequenceImage(Context context) {
super(context);
}
public MblSequenceImage(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MblSequenceImage(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void init(int[] imageResIds, long interval, boolean repeat, MblSequenceImageCallback callback) {
mImageResIds = imageResIds;
mInterval = interval;
mCurrentIndex = 0;
mRepeat = repeat;
mCallback = callback;
}
public void start() {
stop();
mCurrentIndex = 0;
mOnTimerTask.run();
}
public void showImageAtIndex(int index) {
setImageResource(mImageResIds[index]);
mCurrentIndex = index;
}
public void stop() {
sHandler.removeCallbacks(mOnTimerTask);
}
public static interface MblSequenceImageCallback {
public void onFinish();
public void onReset();
public void onShow(int index);
}
}