阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1285|回复: 0

[转帖] android 异步加载图片

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-10 10:03:46 | 显示全部楼层 |阅读模式
    [代码] AsyncImageLoader.javapackage cn.com.mzba.service;
    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;
        }
       
    }
    [代码] ImageCallback.javapackage cn.com.mzba.service;
    import android.graphics.drawable.Drawable;
    import android.widget.ImageView;
    public inte**ce 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);
    }
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表