当前位置: 代码迷 >> Android >> Android运用List图标异步加载
  详细解决方案

Android运用List图标异步加载

热度:14   发布时间:2016-05-01 19:29:05.0
Android应用List图标异步加载

1、创建异步加载类:

?

?

import android.graphics.drawable.Drawable;import android.os.Handler;import android.os.Message;import android.widget.ImageView;import java.io.IOException;import java.io.InputStream;import java.lang.ref.SoftReference;import java.net.MalformedURLException;import java.net.URL;import java.util.HashMap;public class AsyncImageLoader {    // SoftReference是软引用,是为了更好的为了系统回收变量    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() {            public void handleMessage(Message message) {                imageCallback.imageLoaded((Drawable) message.obj, imageView, imageUrl);            }        };        // 建立新一个新的线程下载图片        new Thread() {            @Override            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 url) {        URL m;        InputStream i = null;        try {            m = new URL(url);            i = (InputStream) m.getContent();        } catch (MalformedURLException e1) {            e1.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        Drawable d = Drawable.createFromStream(i, "src");        return d;    }    // 回调接口    public interface ImageCallback {        public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl);    }}
?

2、调用方法:

?

?

Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(), wh.wbicon,            new ImageCallback() {                @Override                public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl) {                    imageView.setImageDrawable(imageDrawable);                }            });
?

?

?

  相关解决方案