public class AsyncImageLoader {


private HashMap<String, SoftReference<Bitmap>> imageCache;
private static AsyncImageLoader asyncImageLoader;


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


/**
* @return 得到类实例
*/
public static AsyncImageLoader getInstance() {
if (asyncImageLoader == null) {
asyncImageLoader = new AsyncImageLoader();
}
return asyncImageLoader;
}


/**
* @param imageUrl
* 图片url
* @param imageCallback
* 回调函数
* @return 图片
*/
public Bitmap loadDrawable(final String imageUrl,
final ImageCallback imageCallback) {
if (imageCache.containsKey(imageUrl)) {
SoftReference<Bitmap> softReference = imageCache.get(imageUrl);
Bitmap bitmap = softReference.get();
if (bitmap != null) {
return bitmap;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message message) {
imageCallback.imageLoaded((Bitmap) message.obj, imageUrl);
}
};
new Thread() {
@Override
public void run() {
Bitmap bitmap = loadImageFromUrl(imageUrl);
imageCache.put(imageUrl, new SoftReference<Bitmap>(bitmap));
Message message = handler.obtainMessage(0, bitmap);
handler.sendMessage(message);
}
}.start();
return null;
}


/**
* @param url
* 图片url
* @return 下载到的图片
*/
public static Bitmap loadImageFromUrl(String url) {
URL m;
InputStream i = null;
try {
m = new URL(url);
HttpURLConnection conn = (HttpURLConnection) m.openConnection();
conn.setConnectTimeout(30 * 1000);
conn.setRequestMethod("GET");
i = conn.getInputStream();

} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(i);
// Drawable d = Drawable.createFromStream(i, "src");
return bitmap;
}


public interface ImageCallback {
public void imageLoaded(Bitmap imageBitmap, String imageUrl);
}


}

更多相关文章

  1. Android图片旋转,缩放,移位,倾斜,对称
  2. Android Imageview图片旋转和大小变化
  3. android高效读取大图片 防止OOM
  4. 重载android返回键响应函数
  5. android 根据Bitmap bitmap 保存图片到手机上
  6. TextView实现中间文字两侧图片的样式 和 左侧图片右侧文字

随机推荐

  1. Java,Android(安卓)Integer和byte的相互转
  2. EditText无法获取焦点(android:descendant
  3. Android监听Home、电源键
  4. 用ndk-build 工具手动生成编译android原
  5. android 输入键盘遮挡页面的问题
  6. android之控件EditText学习
  7. Android(安卓)自定义View(API解析+Demo)
  8. android的xml文件中@、@android:type、@*
  9. Android中的自定义主题和样式
  10. Android开发资料推荐之安卓巴士Android开