您的位置:首页 > 其它

通用工具类-异步加载图片&缓存提取

2012-07-21 20:53 260 查看
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 = null;

    try {

     drawable = ImageUtil.geRoundDrawableFromUrl(imageUrl, 20);

    } catch (Exception e) {

     e.printStackTrace();

    }

                imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));

                Message message = handler.obtainMessage(0, drawable);

                handler.sendMessage(message);

            }

        }.start();

        return null;

    }

    //回调接口

    public interface ImageCallback {

        public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息