`
张玉龙
  • 浏览: 723419 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Android 从缓存中读取图片并异步加载的类[转]

 
阅读更多
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);
    }
}

public class WeiBoAdapater extends BaseAdapter{
        private AsyncImageLoader asyncImageLoader;

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return wbList.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return wbList.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.weibo, null);
            WeiBoHolder wh = new WeiBoHolder();
            wh.wbicon = (ImageView) convertView.findViewById(R.id.wbicon);
            wh.wbtext = (TextView) convertView.findViewById(R.id.wbtext);
            wh.wbtime = (TextView) convertView.findViewById(R.id.wbtime);
            wh.wbuser = (TextView) convertView.findViewById(R.id.wbuser);
            wh.wbimage=(ImageView) convertView.findViewById(R.id.wbimage);
            WeiBoInfo wb = wbList.get(position);
            if(wb != null)
            {
                convertView.setTag(wb.getId());
                wh.wbuser.setText(wb.getUserName());
                wh.wbtime.setText(wb.getTime());
                wh.wbtext.setText(wb.getText(), TextView.BufferType.SPANNABLE);
                
                Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(), wh.wbicon, new ImageCallback(){
                   public void imageLoaded(Drawable imageDrawable,ImageView imageView,String imageUrl){
                       imageView.setImageDrawable(imageDrawable);
                   }
                });
                if (cachedImage == null)
                {
                    wh.wbicon.setImageResource(R.drawable.usericon);
                }else{
                    wh.wbicon.setImageDrawable(cachedImage);
                }                    
            }          
            
            return convertView;
        }
        
    }
分享到:
评论

相关推荐

    Android实现从缓存中读取图片与异步加载功能类.zip

    Android实现从缓存中读取图片与异步加载功能类.zip

    Android实现从缓存中读取图片与异步加载功能类

    本文实例讲述了Android实现从缓存中读取图片与异步加载功能类。分享给大家供大家参考,具体如下: 在新浪微博的微博列表中的图片,为了加速其显示也为了加快程序的响应,可以参考该图片异步加载类实现。 public ...

    安卓源码包android图片缓存&展示Android 异步加载图片等24个合集.zip

    安卓源码包android图片缓存&展示Android 异步加载图片等24个合集: ‘360全景查看demo.rar afinal框架实现图片的简单异步缓存加载.rar andengine中直接加载多张小图片合成一张大图片生成动画精灵.rar android gif...

    Android网络图片异步加载实例

    开发Android程序,一般情况下都会有两个操作,图片的异步加载与缓存,而图片的异步加载大都是从网络读取图片(还有生成本地图片缩略图等操作),为了减少网络操作,加快图片加载速度就需要对图片进行缓存,所以网上...

    Android实现图片异步加载并缓存到本地

    在android应用开发的时候,加载网络图片是一个非常重要的部分,很多图片不可能放在本地,所以就必须要从服务器或者网络读取图片。 软引用是一个现在非常流行的方法,用户体验比较好,不用每次都需要从网络下载图片,...

    Android实现异步加载图片

    因为麦洛之前实现异步加载图片都是使用了AsynTask这个API,继续这个类,实现起来非常简单也很方便.在doInBackground()方法里实现下载逻辑.具体实现如下 实现逻辑是:先从内存中读取,如果内存中有这张图片,则直接使用;...

    Android实现图片缓存与异步加载

    ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量图片的应用中一年多,没有出现oom。 Android程序常常会内存溢出,网上也有很多...

    android 海量图片下载 加载 demo

    Select the picture from android default album 这个demo包含图片管理功能,ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量...

    Android ThinkAndroid开发框架.zip

    具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能, 在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。...

    Android 常用六大框架

    (6) 图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。 (7) 配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference...

    Android项目源码ThinkAndroid开发框架.zip

    具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能, 在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。...

    Android代码-Saraba1st论坛的安卓客户端

    缓存了论坛列表和帖子列表, 如果内存有历史记录就从历史记录读取 新增加 rebuild 分支, 使用 butterknife, eventbus 重构了代码 使用 toolbar 替换了 actionbar, 添加了导航抽屉 应用实现的功能 主论坛及子论坛及...

    安卓源码包android web应用OCR图像识别listview相关EditText输入框Launcher 桌面45个合集

    [四次元]单排显示gridview并从解析JSON读取数据加载项目.zip [四次元]双列关联listview.rar [四次元]基于JBox2D的Android游戏开发全源码.zip [四次元]安卓桌面应用EyeRoom.zip [四次元]实现列表多选的DEMO.zip [四次...

    android 群发短信和邮件

    这是一个从系统读取联系人然后可以群发短信和邮件的源代码程序,程序优化了各种缓存和异步加载。

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--图片之网络异步下载图片 |--图片之获取SD卡所有及边界可调及压缩和软引用和内存回收 |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传...

    Android项目源码开源的 Material Design 豆瓣客户端.zip

    Android 默认在冷启动应用进程至能够调用 Activity.onCreate() 前会加载应用主题中的背景作为预览,而默认背景是白色,与应用在上部拥有绿色 AppBar 的效果不相匹配。 为了生成适应于不同屏幕大小、系统版本的图片...

    Android学习系列教程实例.pdf

    2.2.4. Activity 中四个重要的概念 .. 30 2.3. 旋转屏幕重新加载 Acitivity .......... 33 第 3 章 第三章 ................... 40 3.1. 缓冲界面 ......................................... 40 3.1.1. Demo1 ........

    PlanetXamarin:Xamarin星球

    Gravatar 加载中! 博客帖子: : 查看网络研讨会的录音: : 来自网络研讨会的幻灯片: : PCL 入门: : 入门兼容版本 在 StarterCompatible 文件夹中,您将找到一个 Android 和 iOS 项目,该项目与主 VS 演示...

Global site tag (gtag.js) - Google Analytics