欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android ImageLoader第三方框架解析

程序员文章站 2024-03-03 15:27:28
本文实例为大家分享了android imageloader框架的使用方法,供大家参考,具体内容如下 1.准备工作 1)导入universal-image-loader-...

本文实例为大家分享了android imageloader框架的使用方法,供大家参考,具体内容如下

1.准备工作

1)导入universal-image-loader-1.9.5.jar到项目中

Android ImageLoader第三方框架解析

2)创建myapplication继承application,在oncreate()中初始化imageloader

public class myapplication extends application {
 
 @override
 public void oncreate() {
  super.oncreate();
  initimageloader(this);
 }
 
 // 初始化imageloader
 private void initimageloader(context context) {
  // 初始化参数
  imageloaderconfiguration config = new imageloaderconfiguration.builder(context)
    .threadpriority(thread.norm_priority - 2)    // 线程优先级
    .denycacheimagemultiplesizesinmemory()     // 当同一个uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
    .disccachefilenamegenerator(new md5filenamegenerator()) // 将保存的时候的uri名称用md5
    .tasksprocessingorder(queueprocessingtype.lifo)   // 设置图片下载和显示的工作队列排序
    .writedebuglogs()          // 打印debug log
    .build();
 
  // 全局初始化此配置
  imageloader.getinstance().init(config);
 }
}

2.imageloader_listview中使用

5)初始化displayimageoptions
6)获取imageloader实例
7)显示加载的图片

Android ImageLoader第三方框架解析

public class imageloaderlistviewadapter extends baseadapter {
 private context mcontext;
 private final imageloader imageloader;
 private displayimageoptions options = new displayimageoptions.builder()
   .showstubimage(r.drawable.atguigu_logo)   // 设置图片下载期间显示的图片
   .showimageforemptyuri(r.drawable.atguigu_logo) // 设置图片uri为空或是错误的时候显示的图片
   .showimageonfail(r.drawable.atguigu_logo)  // 设置图片加载或解码过程中发生错误显示的图片
   .cacheinmemory(true)      // 设置下载的图片是否缓存在内存中
   .cacheondisk(true)       // 设置下载的图片是否缓存在sd卡中
   .displayer(new roundedbitmapdisplayer(20)) // 设置成圆角图片
   .build();         // 创建配置过得displayimageoption对象;
 
 public imageloaderlistviewadapter(context context) {
  mcontext = context;
 
  // 初始化imageloader
  imageloader = imageloader.getinstance();
 }
 
 @override
 public int getcount() {
  return constants.images.length;
 }
 
 @override
 public object getitem(int position) {
  return constants.images[position];
 }
 
 @override
 public long getitemid(int position) {
  return position;
 }
 
 @override
 public view getview(int position, view convertview, viewgroup parent) {
  viewholder holder;
  if(convertview == null) {
   convertview = view.inflate(mcontext, r.layout.item_imageloader_listview, null);
   holder = new viewholder(convertview);
   convertview.settag(holder);
  }else {
   holder = (viewholder) convertview.gettag();
  }
  holder.name.settext("item"+(position + 1));
 
  imageloader.displayimage(constants.images[position],holder.iv,options);
 
  return convertview;
 }
 
 class viewholder{
  @bind(r.id.iv_imageloader_listview)
  imageview iv;
 
  @bind(r.id.tv_imageloader_name)
  textview name;
 
  public viewholder(view view) {
   butterknife.bind(this,view);
  }
 }
}

3.imageloader_在viewpager中使用

public class imageloaderviewpageradapter extends pageradapter {
 
 private context mcontext;
 private final imageloader imageloader;
 private displayimageoptions options = new displayimageoptions.builder()
   .showimageforemptyuri(r.drawable.atguigu_logo) // 设置图片uri为空或是错误的时候显示的图片
   .showimageonfail(r.drawable.atguigu_logo)  // 设置图片加载或解码过程中发生错误显示的图片
   .resetviewbeforeloading(true)    // 设置图片在下载前是否重置,复位
   .cacheondisc(true)       // 设置下载的图片是否缓存在sd卡中
   .imagescaletype(imagescaletype.exactly)  // 设置图片以如何的编码方式显示
   .bitmapconfig(bitmap.config.rgb_565)  // 设置图片的解码类型
   .displayer(new fadeinbitmapdisplayer(300)) // 设置图片渐变显示
   .build();
 ;
 
 public imageloaderviewpageradapter(context context) {
  mcontext = context;
 
  // 初始化imageloader
  imageloader = imageloader.getinstance();
 }
 
 @override
 public object instantiateitem(viewgroup container, int position) {
  // 添加布局文件
  view view = view.inflate(mcontext, r.layout.item_imageloader_viewpager, null);
 
  // 获取控件对象
  imageview iv = (imageview) view.findviewbyid(r.id.iv_imageloader_viewpager);
 
  // 显示图片
  imageloader.displayimage(constants.images[position], iv, options);
 
  ((viewpager) container).addview(view, 0);
 
  return view;
 }
 
 @override
 public void destroyitem(viewgroup container, int position, object object) {
  ((viewpager) container).removeview((view) object);
 }
 
 @override
 public int getcount() {
  return constants.images.length;
 }
 
 @override
 public boolean isviewfromobject(view view, object object) {
  return view.equals(object);
 }
}

3.imageloader 内存溢出解决办法

1)减少线程池中线程的个数,在imageloaderconfiguration中的(.threadpoolsize)中配置,推荐配置1-5。
2)在displayimageoptions选项中配置bitmapconfig为bitmap.config.rgb_565,因为默认是argb_8888, 使用rgb_565会比使用argb_8888少消耗2倍的内存。
3)在imageloaderconfiguration中配置图片的内存缓存为memorycache(new weakmemorycache()) 或者不使用内存缓存。
4)在displayimageoptions选项中设置.imagescaletype(imagescaletype.in_sample_int)或者imagescaletype(imagescaletype.exactly)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。