目录
准备
movie 类专用于 gif 播放。
movie 有duration
movie.setTime(int time)---> movie.draw(canvas, 0, 0) 可以将 move的对应时刻图像绘制在canvas之上。
思路
1.获取movie
2.开启线程 根据人 视角 25ms 绘制一次
演示
动图制作不容易...静态图代替
简书.png
代码
代码简单,利于学习入门,但不利于使用。
public class MyGifView extends View {
private Movie movie;
private int duration = 0;
private int now = 0;
public MyGifView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
//获取movie 时长
movie = Movie.decodeStream(getResources().openRawResource(R.drawable.test));
duration = movie.duration();
//开始播放 25ms刷新一次
new Timer().schedule(new TimerTask() {
@Override
public void run() {
now += 25;
if (now < duration)
invalidate();
}
}, 0, 25);
}
/**
* 绘制
* setTime
* 设置canvas缩放比例
* draw 在 左上角坐标 0,0
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
movie.setTime(now);
canvas.scale((float)getWidth()/movie.width(),(float)getHeight()/movie.height());
movie.draw(canvas, 0, 0);
}
}