package com.asyn;
import java.lang.ref.SoftReference;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
public class AsynImageLoader {
private Map<String,SoftReference<Drawable>> imageCache = new HashMap<String, SoftReference<Drawable>>();
public Drawable loadDrawable(final String imageUrl,final ImageCallBack callBack){
if(imageCache.containsKey(imageUrl)){
SoftReference<Drawable> softRerence = imageCache.get(imageUrl);
if(softRerence.get()!=null){
return softRerence.get();
}
}
final Handler handle = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
callBack.imageLoaded((Drawable)msg.obj);
}
};
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
Drawable drawable = loadImageFromUrl(imageUrl);
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message message = handle.obtainMessage(0, drawable);
message.sendToTarget();
}
}.start();
return null;
}
protected Drawable loadImageFromUrl(String imageUrl) {
try {
return Drawable.createFromStream(new URL(imageUrl).openStream(), "src");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public interface ImageCallBack{
public void imageLoaded(Drawable drawable);
}
}
- 1
- 2
前往页