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