ムービーでGIFを再生
public class ViewContent extends View{
Movie movie;
long mStart;
public ViewContent(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
InputStream is = getResources().openRawResource(R.drawable.g1);
movie = Movie.decodeStream(is);
}
public ViewContent(Context context){
this(context, null);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
int duration = movie.duration();
long now = android.os.SystemClock.uptimeMillis();
if(mStart == 0){
mStart = now;
}
movie.setTime((int) ((now - mStart) % duration));
movie.draw(canvas,0, 0);
invalidate();
}
}
肝心なところは二つある
1.
movie.setTime((int) ((now - mStart) % duration));
ここでgifを再生する時間のアニメーション単位をミリ秒と設定すると、現在再生されているのは現在の時間に対応する画面であることが保証されます.
2.
movie.draw(canvas,0, 0);
invalidate();
ここではgifのフレームを描き、それ自体をリフレッシュしてonDrawメソッドを呼び出し、アニメーションの効果を達成します.