Android实现从缓存中读取图片与异步加载功能类
程序员文章站
2024-03-06 11:10:19
本文实例讲述了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程序设计有所帮助。