当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现从缓存中读取图片与异步加载功能类

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

五年二班的吸血鬼,碧螺春怎么喝,真命天妃全集

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网