Android實現圖片的異步載入顯示

gd7g 9年前發布 | 2K 次閱讀 Java Android

AsyncImageLoader.java

import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.net.URL;
import java.util.HashMap;

import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; import android.widget.ImageView; /**

  • 實現圖片的異步載入顯示
  • @author kandanle / public class AsyncImageLoader {

    /**

    • 軟引用對象,在響應內存需要時,由垃圾回收器決定是否清除此對象。軟引用對象最常用于實現內存敏感的緩存。 */ private HashMap<String, SoftReference<Drawable>> imageCache;

      public AsyncImageLoader(){ imageCache = new HashMap<String, SoftReference<Drawable>>(); }

      public Drawable loadDrawable(final String imageUrl,final ImageView imageView,final ImageCallback imagecallback){ if(imageCache.containsKey(imageUrl)){

       //從緩存中讀取人人
       SoftReference<Drawable> softReference = imageCache.get(imageUrl);
       Drawable drawable = softReference.get();
       if(drawable != null){
           return drawable;
       }
      

      } final Handler handler = new Handler(){

       @Override
       public void handleMessage(Message msg) {
           super.handleMessage(msg);
           imagecallback.imageLoaded((Drawable)msg.obj, imageView, imageUrl);
       }
      

      }; new Thread(){

       public void run() {
           Drawable drawable = loadImageFromUrl(imageUrl);
           imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
           Message message = handler.obtainMessage(0, drawable);
           handler.sendMessage(message);
       }
      

      }.start();

      return null; }

      public static Drawable loadImageFromUrl(String urlPath){ URL url; InputStream is = null; try{

       url = new URL(urlPath);
       is = (InputStream)url.getContent();
      

      }catch(Exception e){

       e.printStackTrace();
      

      } Drawable drawable = Drawable.createFromStream(is, "src"); return drawable; }

}</pre>

ImageCallback.java

import android.graphics.drawable.Drawable;
import android.widget.ImageView;

public interface ImageCallback { public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl); }

Drawable drawable = asyncImageLoader.loadDrawable(weiboInfo.getUserIcon(), viewUserIcon, new ImageCallback() { @Override public void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl) { imageView.setImageDrawable(imageDrawable); } }); if(drawable == null){ viewUserIcon.setImageResource(R.drawable.portrait); }else{ viewUserIcon.setImageDrawable(drawable); }</pre>

 本文由用戶 gd7g 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!