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

本文实例讲述了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); } }

在Adapter中使用的方法为:

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相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android视图View技巧总结》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》及《Android资源操作技巧汇总》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-09-29 12:59:49

Android实现从缓存中读取图片与异步加载功能类的相关文章

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

本文实例讲述了Android实现从缓存中读取图片与异步加载功能类.分享给大家供大家参考,具体如下: 在新浪微博的微博列表中的图片,为了加速其显示也为了加快程序的响应,可以参考该图片异步加载类实现. public class AsyncImageLoader { //SoftReference是软引用,是为了更好的为了系统回收变量 private HashMap<String, SoftReference<Drawable>> imageCache; public AsyncImag

Java中框架的概念,以及从配置文件中读取配置信息并加载指定类

  学了反射后,也不知道反射是干什么的,那学了就没什么用了. 反射在框架中有很重要的作用,什么是框架呢? 大家在做JavaWeb开发的时候 用过JDBC吧,首先上来的时候 我们需要加载JDBC的驱动. Class.forName(...)  //每个不同的驱动对应不同的类名字 对于开发人员来说不同的人选择的驱动程序 不一样 .那么我们就需要不同的驱动类 . 我们是在JSP标签中进行了 这个类的调用,那么相对来说  JSP就是一个框架,而我们加载的这个类就是一个工具. 框架与工具的关系 就是 我们

图片加载-如何在android中的ListView实现图片的异步加载?

问题描述 如何在android中的ListView实现图片的异步加载? 想要实现对ListView Item 中图片的加载?各位帮忙怎么实现? 解决方案 我封装了一个异步加载类 开放源码并且提供示例代码 这是地址ImageAsyncLoader 解决方案二: Java代码 package cn.wangmeng.test; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftRefere

WPF技术触屏上的应用系列(五): 图片列表异步加载、手指进行缩小、放大、拖动 、惯性滑入滑出等效果

原文:WPF技术触屏上的应用系列(五): 图片列表异步加载.手指进行缩小.放大.拖动 .惯性滑入滑出等效果         去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统,54寸大屏电脑电视一体机.要求有很炫的展示效果,要有一定的视觉冲击力,可触控操作.当然满足客户的要求也可以有其它途径.但鉴于咱是搞 .NET技术的,首先其冲想到的微软WPF方面,之前对WPF的了解与学习也只是停留在比较浅的层面,没有进一步深入学习与应用.所以在项目接来以后,也就赶鸭子

jquery 实现图片的缓加载功能

问题描述 jquery 实现图片的缓加载功能 目标:实现界面上图片的按需加载--即缓加载: 难点:页面是使用模板生成的: 如下: <script type="text/html" > <div class="entry"> <img src="../js/img/grey.gif" data-original="../js/img/bmw_m1_hood.jpg" width="765&

javascript-在js里动态添加图片是异步加载吗?

问题描述 在js里动态添加图片是异步加载吗? 在js里,如果动态添加图片,即 var img = new Image(); img.src = '......'; //图片地址假设是一组字符串数组里的某项,非ajax异步获取 body.appendChild(img); 假设我绑定了一个鼠标滚动事件,当鼠标滚动时就如上动态加载图片,这种模式是异步加载图片吗? 解决方案 是的,设置src本身是同步的,但是浏览器下载和显示图片是异步的. 解决方案二: 你是事件触发的,肯定是异步获取的,但是你这么写的

MVC中实现部分内容异步加载

action中定义一个得到结果集的方法 public ActionResult GetItemTree(string title, int itemid, int? page) { pp = new PagingParam(page ?? 1, VConfig.WebConstConfig.PageSize); Common.Page.PagedList<Entity.Res_Item_Resource_R> res_Item_Resource_R = iResourceService.Get

JSP中使用EasyUI实现异步加载tree(整合Struts 2)

首先jsp页面有一ul用于展现Tree <ul id="mytree"></ul> 加载Tree <script type="text/javascript"> $('#mytree').tree({ url:'treeLoad.action' }); </script> 配置Action <struts> <package name="tree_json" extends=&qu

SharePoint中如何实现ajax异步加载数据

初到公司,由原想的asp.net开发转向了SharePoint(简称SP)开发,个人感觉与之前差别不大,今天用sp实现异步加载数据的时候遇到点问题,之前在asp.net下一步都是用 jquery.ajax + .ashx 来实现,可是在sp下创建项的时候木有发现有ashx页面可以创建,那sp下如何实现异步加载数据那,有以下几种方式: 1.创建MyModule类实现IHttpModule借口并在主web.config下配置该节点,在里面添加事件处理,并添加类MyHandler实现IHttpHand