主流图片加载框架对比,及遇到的问题
来源:互联网 发布:少年班人物原型知乎 编辑:程序博客网 时间:2024/05/17 22:20
1、开源框架XUtils,参考http://blog.csdn.net/dj0379/article/details/38356773
XUtils框架中的BitmapUtils不能加载drawable中的图片,如果想加载可以参考https://github.com/nostra13/Android-Universal-Image-Loader控件中对drawable的处理。
可以参考文章http://www.07net01.com/2015/03/787393.html,它在加载相册图片时不会出现图片重复现象。
缓存采用的是LruDiskCache LruMemoryCache
2、开源框架Android-Universal-Image-Loader,参考http://blog.csdn.net/xiaanming/article/details/26810303
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
支持图片的内存缓存,文件系统缓存或者SD卡缓存
支持图片下载过程的监听
根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
提供在较慢的网络下对图片进行加载
3、开源框架Picasso,参考 http://square.github.io/picasso/
这个仍然是Square的开源项目,Picasso是一个用于Android平台上的下载和缓存图片的项目。它有许多定制选项,如何处理下载图片(包括调整和裁剪,以及提供一个接口让你随自己心意将图片转换成圆角等)。Picasso将要下载的图片(如果没有缓存)并将它负载到指定的目标,转换图片以适合所显示的ImageView,来减少内存消耗。
1、可以快速加载本地图片,对所有图片的加载必须使用它,如果有的使用image.setImageResource,有的使用Picasso,加载图片时可能重复现象。PS:有三张图片,第一张用Picasso,后面用image.setImageResource方法就有可能出现图片重复现象。
加载图片效率高,可以参考http://blog.csdn.net/xu_fu/article/details/17043231
Picasso.with(mContext)
.load(new File(bean.name))
.placeholder(R.drawable.default_error)
//.error(R.drawable.default_error)
.resize(DensityUtil.dip2px(mContext, 80), DensityUtil.dip2px(mContext, 80))
.centerCrop()
.into(holder.iv_image);
4、Uri解析过程
//在加载相册图片时,对于一些网络图片名中有%号的,会将%25通过Uri解析成%,导致找不到图片
uri之前-/storage/emulated/0/CSDN/http%253A%252F%252Fimg.ask.csdn.net%252Fupload%252F201506%252F08%252F1433727012_994034.png
uri之后-/storage/emulated/0/CSDN/http%3A%2F%2Fimg.ask.csdn.net%2Fupload%2F201506%2F08%2F1433727012_994034.png
holder.iv_image.setImageURI(Uri.parse("file://"+path));
5、下面是项目中遇到读取本地图片和drawable图片
XUtils框架中的BitmapUtils不能加载drawable中的图片,如果想加载可以参考https://github.com/nostra13/Android-Universal-Image-Loader控件中对drawable的处理。
可以参考文章http://www.07net01.com/2015/03/787393.html,它在加载相册图片时不会出现图片重复现象。
缓存采用的是LruDiskCache LruMemoryCache
2、开源框架Android-Universal-Image-Loader,参考http://blog.csdn.net/xiaanming/article/details/26810303
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
支持图片的内存缓存,文件系统缓存或者SD卡缓存
支持图片下载过程的监听
根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
提供在较慢的网络下对图片进行加载
/** * ImageLoader框架优化 * 1、加载列表时,避免重复创建DisplayImageOptions对象 * 2、图片类型设置为Bitmap.Config.RGB_565 * 3、图片缩放方式设置为ImageScaleType.IN_SAMPLE_INT * 4、内存缓存(cacheInMemory)设置为false * 5、内存缓存采用弱引用,可以采用LRULimitedMemoryCache,WeakMemoryCache不太稳定缓存的图片容易被回收掉 * 6、使用ImageViewAware,它将ImageView的强引用变成弱引用,当内存不足的时候,可以更好的回收ImageView对象 * 7、在滚动时不加载图片,setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, false)), * 但是会出现图片错乱现象。 */
3、开源框架Picasso,参考 http://square.github.io/picasso/
这个仍然是Square的开源项目,Picasso是一个用于Android平台上的下载和缓存图片的项目。它有许多定制选项,如何处理下载图片(包括调整和裁剪,以及提供一个接口让你随自己心意将图片转换成圆角等)。Picasso将要下载的图片(如果没有缓存)并将它负载到指定的目标,转换图片以适合所显示的ImageView,来减少内存消耗。
1、可以快速加载本地图片,对所有图片的加载必须使用它,如果有的使用image.setImageResource,有的使用Picasso,加载图片时可能重复现象。PS:有三张图片,第一张用Picasso,后面用image.setImageResource方法就有可能出现图片重复现象。
加载图片效率高,可以参考http://blog.csdn.net/xu_fu/article/details/17043231
Picasso.with(mContext)
.load(new File(bean.name))
.placeholder(R.drawable.default_error)
//.error(R.drawable.default_error)
.resize(DensityUtil.dip2px(mContext, 80), DensityUtil.dip2px(mContext, 80))
.centerCrop()
.into(holder.iv_image);
4、Uri解析过程
//在加载相册图片时,对于一些网络图片名中有%号的,会将%25通过Uri解析成%,导致找不到图片
uri之前-/storage/emulated/0/CSDN/http%253A%252F%252Fimg.ask.csdn.net%252Fupload%252F201506%252F08%252F1433727012_994034.png
uri之后-/storage/emulated/0/CSDN/http%3A%2F%2Fimg.ask.csdn.net%2Fupload%2F201506%2F08%2F1433727012_994034.png
holder.iv_image.setImageURI(Uri.parse("file://"+path));
5、下面是项目中遇到读取本地图片和drawable图片
public View getView(int position, View convertView, ViewGroup parent) {....//设置gridview项宽度和高度一样if (convertView!=null) {convertView.setLayoutParams(new AbsListView.LayoutParams(itemWidth,itemWidth));}if (bean.id==-1) {//采用setImageResource结合Picasso或ImageLoader会出现图片重复现象,因此必须要统一//holder.iv_image.setImageResource(R.mipmap.send_photo);//Picasso.with(mContext).load(R.mipmap.send_photo).into(holder.iv_image);//ImageLoader.getInstance().displayImage( bean.name, new ImageViewAware(holder.iv_image));}else if(bean.id==-2){//holder.iv_image.setImageResource(R.mipmap.send_video);//Picasso.with(mContext).load(R.mipmap.send_video).into(holder.iv_image);//ImageLoader.getInstance().displayImage( bean.name, new ImageViewAware(holder.iv_image));}else {// 1、使用这种方法,没有缓存策略,加载速度很慢//holder.iv_image.setImageBitmap(decodeFile(bean.name,itemWidth,itemWidth));//2、对含有%名字的图片可能加载不到,同1//holder.iv_image.setImageURI(Uri.parse("file:/"+bean.name));//3、开源框架 //mBitmapUtils.display(holder.iv_image, bean.name);//4、开源框架 Picasso Picasso.with(mContext) .load(new File(bean.name)) .placeholder(R.drawable.default_error) .resize(itemWidth, itemWidth) .centerCrop() .into(holder.iv_image);//5、开源框架//ImageLoader.getInstance().displayImage("file:/"+bean.name, new ImageViewAware(holder.iv_image));}return convertView;}//通过下面的方法来进行加载图片时,同时加载九张图片(2-3M)时需要2秒时间,其中宽度和高度都是手机屏幕宽度的1/3. private Bitmap decodeFile(String path, int viewWidth, int viewHeight){ BitmapFactory.Options options = new BitmapFactory.Options(); //设置为true,表示解析Bitmap对象,该对象不占内存 options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); //设置缩放比例 options.inSampleSize = computeScale(options, viewWidth, viewHeight); System.out.println("---------------+"+options.inSampleSize); //设置为false,解析Bitmap对象加入到内存中 options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path, options); } private int computeScale(BitmapFactory.Options options, int viewWidth, int viewHeight){ int inSampleSize = 1; if(viewWidth == 0 || viewWidth == 0){ return inSampleSize; } int bitmapWidth = options.outWidth; int bitmapHeight = options.outHeight; if(bitmapWidth > viewWidth || bitmapHeight > viewWidth){ int widthScale = Math.round((float) bitmapWidth / (float) viewWidth); int heightScale = Math.round((float) bitmapHeight / (float) viewWidth); inSampleSize = widthScale < heightScale ? widthScale : heightScale; } return inSampleSize; }
0 0
- 主流图片加载框架对比,及遇到的问题
- 使用glide框架加载图片遇到的一些问题
- 图片加载框架对比分析
- 主流图片加载框架---Glide PK Picasso
- 主流PHP框架的优缺点对比分析
- 主流php框架对比
- Picasso图片框架加载图片 使用及缓存问题
- SSM框架搭建,及遇到的问题
- Android 异步加载图片框架对比
- 第三方图片加载框架对比分析
- Android 图片加载框架分析对比
- Android 主流网络图片加载缓存库框架Universal-ImageLoader的使用
- 主流深度学习框架对比
- 主流深度学习框架对比
- Android主流网络框架对比
- 深度学习几大主流框架的对比
- VS2015——MFC加载图片遇到的问题
- Glide 加载圆形图片CircleImageView遇到的问题
- 基于pgrouting的任意两点间的最短路径查询函数二
- msp430学习笔记之定时器A
- grep与正则表达式
- ActiveX 属性持久性 是否是测试环境判断
- iOS-compile_debug-crash_record
- 主流图片加载框架对比,及遇到的问题
- AVL Tree(平衡二叉树)
- ANE原生代码的调试(安卓)++flex通过ANE调试原生安卓代码
- 1153 选择子序列
- Mysql数据库备份和还原常用的命令
- 机器学习一些博客
- hello, world
- JavaScript之this用法详解
- NowCoder猜想---统计n以内的素数个数