GIF-enabled ImageView, using the open source framework on GitHub, project address https://github.com/koral--/android-gif-drawable
If GIF is a network image, this library does not support loading a URL directly, but provides a gifdrawable class that can create gifdrawable through files, input streams, and so on .
So you can download it first or get the input stream by creating a drawable load. The following examples illustrate two methods:
1. Download to SD card, then load
Downloadutils.java
Public classDownloadutils {Private Final intDown_start = 1;//Handler message type (start download) Private Final intDown_position = 2;//handler message type (download location) Private Final intDown_complete = 3;//handler message type (download complete) Private Final intDown_error = 4;//handler message type (download failed) PrivateOndownloadlistener Ondownloadlistener; Public voidSetondownloadlistener (Ondownloadlistener ondownloadlistener) { This. Ondownloadlistener =Ondownloadlistener; } /*** Download File * *@paramURL file path *@paramfilepath Save Address*/ Public voidDownload (string URL, string filepath) {myrunnable Mr=Newmyrunnable (); Mr.url=URL; Mr.filepath=filepath; NewThread (MR). Start (); } @SuppressWarnings ("Unused") Private voidSendmsg (intWhat ) {sendmsg (What,NULL); } Private voidSendmsg (intWhat , Object mess) {Message m=Myhandler.obtainmessage (); M.what=what ; M.obj=mess; M.sendtotarget (); } Handler MyHandler=NewHandler () { Public voidhandlemessage (Message msg) {Switch(msg.what) { CaseDown_start://Start Download intFileSize =(Integer) msg.obj; Ondownloadlistener.ondownloadconnect (filesize); Break; CaseDown_position://Download Location intpos =(Integer) msg.obj; Ondownloadlistener.ondownloadupdate (POS); Break; CaseDown_complete://Download CompleteString URL =(String) msg.obj; Ondownloadlistener.ondownloadcomplete (URL); Break; CaseDown_error://Download FailedException e =(Exception) msg.obj; E.printstacktrace (); Ondownloadlistener.ondownloaderror (e); Break; } Super. Handlemessage (msg); } }; classMyrunnableImplementsRunnable {PrivateString url = ""; PrivateString filepath = ""; @Override Public voidrun () {Try{dodownloadthefile (URL, filepath); } Catch(Exception e) {sendmsg (Down_error, E); } } } /*** Download File * *@paramURL Download Path *@paramfilepath Save path *@throwsException*/ Private voidDodownloadthefile (string URL, string filepath)throwsException {if(!urlutil.isnetworkurl (URL)) {sendmsg (Down_error,NewException ("not valid:" +URL)); return; } URL Myurl=Newurl (URL); URLConnection Conn=myurl.openconnection (); Conn.connect (); InputStream is=NULL; intFileSize = 0; Try{ is=Conn.getinputstream (); FileSize= Conn.getcontentlength ();//get file size based on responsesendmsg (Down_start, filesize); } Catch(Exception e) {sendmsg (Down_error,NewException (NewException ("Cannot get File"))); return; } FileOutputStream Fos=NewFileOutputStream (filepath);//creates a write-to-file memory stream,//write a file with this flow to target byteBuf[] =New byte[1024]; intNumread = 0; inttemp = 0; while((Numread = Is.read (BUF))! =-1) {fos.write (buf,0, Numread); Fos.flush (); Temp+=Numread; Sendmsg (down_position, temp); } is.close (); Fos.close (); Sendmsg (Down_complete, filepath); }}
View Code
Download monitoring in Activity settings
Downloadutils downloadutils =Newdownloadutils (); Downloadutils.download ("Http://img15.3lian.com/2015/gif/1/78/1.gif", Getapppath () + "/1.gif"); Downloadutils.setondownloadlistener (NewOndownloadlistener () {@Override Public voidOndownloadupdate (intpercent) {} @Override Public voidOndownloaderror (Exception e) {} @Override Public voidOndownloadconnect (intfilesize) {} @Override Public voidondownloadcomplete (Object result) {Try{gifdrawable gifdrawable=NewGifdrawable (Getapppath () + "/1.gif"); Gifimageview.setbackgrounddrawable (gifdrawable); } Catch(IOException e) {e.printstacktrace (); } } });
2. Get byte [] type stream, create drawable, use network request frame Commons-httpclient-3.0.1.jar
Loadgifutils loadgifutils =Newloadgifutils (); Loadgifutils.setlistener (NewLoadgifutils.oncompltedlistener () {@Override Public voidOncomplted (byte[] bt) { Try{gifdrawable drawable=Newgifdrawable (BT); Gifimageview.setbackgrounddrawable (drawable); } Catch(IOException e) {e.printstacktrace (); } } }); Loadgifutils.loadgif ("Http://img15.3lian.com/2015/gif/1/78/1.gif");
Loadgifutils.java
Public classLoadgifutils {PrivateOncompltedlistener Listener; Public voidloadgif (String url) {myrunnable myrunnable=Newmyrunnable (URL); NewThread (myrunnable). Start (); } classMyrunnableImplementsRunnable {String URL; myrunnable (String URL) { This. url =URL; } @Override Public voidrun () {byte[] bt=New byte[1024]; Try{HttpClient Client=NewHttpClient (); GetMethod Get=Newgetmethod (URL); Client.executemethod (get); BT=Get.getresponsebody (); Sendmsg (1, BT); } Catch(Throwable ex) {System.out.println (ex.tostring ()); } } } Private voidSendmsg (intWhat , Object mess) {Message m=Handler.obtainmessage (); M.what=what ; M.obj=mess; M.sendtotarget (); } Handler Handler=NewHandler () {@Override Public voidhandlemessage (Message msg) {Switch(msg.what) { Case1://Start Download byte[] bt = (byte[]) msg.obj; if(listener!=NULL) {listener.oncomplted (BT); } Break; } Super. Handlemessage (msg); } }; InterfaceOncompltedlistener {voidOncomplted (byte[] bt); } voidSetlistener (Oncompltedlistener listener) { This. listener=Listener; }}
View Code
Android Load Network GIF pictures