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方法,如此动画的效果就达到了。