public class GifSurface extends SurfaceView implements Callback{
private Movie movie;
private static int ZOOM = 2;
public String path;
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
Canvas canvas = holder.lockCanvas();
canvas.save();
canvas.scale(ZOOM, ZOOM);
movie.draw(canvas, 0, 0);
canvas.restore();
holder.unlockCanvasAndPost(canvas);
movie.setTime((int) (System.currentTimeMillis()%movie.duration()));
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 30);
}
};
private SurfaceHolder holder;
public GifSurface(Context context, AttributeSet attrs) {
super(context, attrs);
holder = getHolder();
holder.addCallback(this);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
try {
InputStream is = getContext().getAssets().open("122856549320150205220255.gif");
movie = Movie.decodeStream(is);
int width = movie.width();
int height = movie.height();
setMeasuredDimension(width*ZOOM, height*ZOOM);
handler.post(runnable);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
handler.removeCallbacks(runnable);
}
private void setZoom(int zoom) {
this.ZOOM = zoom;
}
public void setPath(String path) {
this.path = path;
}
}