Public classGifsurfaceextendsSurfaceviewImplementscallback{Privatemovie Movie; Private Static intZOOM = 2; PublicString Path; PrivateHandler Handler =NewHandler (); PrivateRunnable Runnable =NewRunnable () {@Override Public voidrun () {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); } }; PrivateSurfaceholder Holder; PublicGifsurface (Context context, AttributeSet attrs) {Super(context, attrs); Holder=Getholder (); Holder.addcallback ( This); } @Overrideprotected voidOnmeasure (intWidthmeasurespec,intHeightmeasurespec) { Try{InputStream is= GetContext (). Getassets (). Open ("122856549320150205220255.gif"); Movie=Movie.decodestream (IS); intwidth =movie.width (); intHeight =movie.height (); Setmeasureddimension (Width*zoom, height*ZOOM); Handler.post (runnable); } Catch(IOException e) {e.printstacktrace (); }} @Override Public voidsurfacecreated (Surfaceholder holder) {} @Override Public voidSurfacechanged (Surfaceholder holder,intFormatintwidth,intheight) {} @Override Public voidsurfacedestroyed (Surfaceholder holder) {handler.removecallbacks (runnable); } Private voidSetzoom (intzoom) { This. ZOOM =Zoom; } Public voidSetPath (String path) { This. Path =path; }}
Android GIF Playback