package com.anwen.widget;
import android.os.Handler;
import android.util.Log;
import android.widget.ImageView;
import com.anwen.event.BaseEvent;
import com.anwen.event.EventCode;
import com.anwen.manager.EventManager;
public class ImageAnimation {
private Handler handler;//線程處理
private MovieAction action;//播放器
//固定循環時間
public ImageAnimation(ImageView view,int[] frameRes,int duration){
int len = frameRes.length;
int [] frameDuration = new int[len];
for(int i=0;i
frameDuration[i]=duration;
}
this.Init(view,frameRes,frameDuration);
}
//非固定循環時間
public ImageAnimation(ImageView view, int [] frameRes,int[] frameDuration){
this.Init(view,frameRes,frameDuration);
}
private void Init(ImageView view, int [] frameRes,int[] frameDuration){
if(null==view) {
Log.e("ImageAnimation", "建立動畫失敗。");
}else if(null == frameRes || null == frameDuration ||0 == frameRes.length ||0 == frameDuration.length) {
Log.e("ImageAnimation", "幀數或資源為空.");
}else if(frameRes.length != frameDuration.length){
Log.e("ImageAnimation","幀數與間隔時間不比對");
}else {
handler = new Handler();
action = new MovieAction(handler, view, frameRes, frameDuration);
}
}
}
//動畫播放類
class MovieAction implements Runnable{
private ImageView mView;//畫布
private int [] mFrameRes;//資源
private int[] mFrameDuration;//間隔
private int currentFrame;//目前幀
private int totalFrame;//總幀數
private Handler mHandler;//線程
public MovieAction(Handler handler,ImageView view, int [] frameRes,int[] frameDuration){
this.mView = view;
this.mFrameRes = frameRes;
this.mFrameDuration = frameDuration;
this.mHandler = handler;
totalFrame = this.mFrameRes.length;
currentFrame = 0;
mHandler.postDelayed(this, mFrameDuration[currentFrame]);
}
public void destory(){
this.mHandler.removeCallbacks(this);
}
@Override
public void run() {
mView.setBackgroundResource(mFrameRes[currentFrame]);
currentFrame++;
if(++currentFrame
mHandler.postDelayed(this, mFrameDuration[currentFrame]);
}else{
System.out.println("destory、、、、、");
destory();
EventManager.getInstance().DispatchEvent(new BaseEvent(EventCode.ShowBtn));
}
}
}