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>