Android ImageLoader第三方框架解析
本文实例为大家分享了android imageloader框架的使用方法,供大家参考,具体内容如下
1.准备工作
1)导入universal-image-loader-1.9.5.jar到项目中
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)显示加载的图片
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)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Struts2 OGNL表达式实例详解
下一篇: Java中BEAN与EJB的区别浅析
推荐阅读
-
Android ImageLoader第三方框架解析
-
全面解析Android的开源图片框架Universal-Image-Loader
-
全面解析Android的开源图片框架Universal-Image-Loader
-
Android图片加载框架解析之实现带进度的Glide图片加载功能
-
Android 项目中用得最多最火的第三方框架可能都在这里了
-
Android-第三方框架-网络请求之okhttp
-
Android 入门第六讲05-JSON解析第三方框架Gson(GSON框架使用方法,GSON解析Json数据(json对象,对象嵌套,数组,对象数组,json对象嵌套JSON对象数组))
-
Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法
-
Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法
-
Android 搭建MVP+Retrofit+RxJava网络请求框架解析