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方法,如此动画的效果就达到了。
GIF动画播放View实现
本文介绍了一个自定义View用于播放GIF动画的方法。通过Movie类解析资源文件,并利用onDraw方法不断更新显示的帧来达到动画效果。关键代码包括设置动画时间和绘制当前帧。
576

被折叠的 条评论
为什么被折叠?



