博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
阅读量:6908 次
发布时间:2019-06-27

本文共 4508 字,大约阅读时间需要 15 分钟。

hot3.png

1.ImageLoader

2.Volley

3.picasso

4.glide

5.fresco

首先:以前自己一直是使用ImageLoader的,,ImageLoader大家都是知道的,使用最广泛,使用方式也是最灵活的,,但后续出现了很多图片加载框架,自己也没去体验, 有一天,当ImageLoader无法满足,或者看到别人的项目框架图片加载比自己更佳流畅的时候,就研究了一下现在最流行的几种图片加载方式。

Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。Picasso: Square出品,必属精品。和OkHttp搭配起来更配呦!Volley ImageLoader:Google官方出品,可惜不能加载本地图片~Fresco:Facebook出的,天生骄傲!不是一般的强大。Glide:Google推荐的图片加载库,专注于流畅的滚动。

1.volley-imageloader

基于volley的 图片框架,使用需要自己配置,因为volley自身是不带图片加载的配置,这里就不做详细介绍了。

2.picasso 是square公司开源的一个图形缓存库使用也非常简单

使用方式:        (1) 导入外部库 compile 'com.squareup.picasso:picasso:2.5.2'        (2)  Picasso.with(context).load("加载地址").placeholder("加载前显示的图片").error("错误显示的图片").centerCrop("类型吧").resize("大小").into("要显示的Image");     优点:        (1)在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。        (2)使用复杂的图片压缩转换来尽可能的减少内存消耗        (3)自带内存和硬盘二级缓存功能    部分解决方案:[解决方案](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html)

3.glide 像是picasso的高仿版,使用方式 一模一样几乎,,但个人推荐使用glide,自我测试,内存消耗极小,加载速度快于picasso ,更适合使用在滑动listview 里面的图片,google推荐的,,现在做的小应用都是用了glide

使用方式:        (1)导入外部库 compile 'com.github.bumptech.glide:glide:3.6.1'        (2)Glide.with(mContext).load(url).placeholder(R.drawable.loading_spinner)    .crossFade().into(myImageView);//crossFade()渐现效果        部分解决方案:[解决Listview里面image无法设置set, 或者返回drawbler返回自己设置一些效果等](http://www.wtoutiao.com/p/z53DE5.html)

4.fresco是facebook推出的一款强大的android图片处理库, 太强大了,但是唯一的缺点就是太大了,使用后app至少增加2M,不适合小应用使用

使用方式 :    1.导入外部库      compile 'com.facebook.fresco:fresco:0.6.0'   //0.8.0    2.Application初始化       Fresco.initialize(this);//强大的图片加载框架    3.开始使用:       
针对 fresco 自己封装了几个小工具 /** * 普通显示 * */public static void showFescoBitmap(SimpleDraweeView drawee,String url){ //方法二 ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)) .setAutoRotateEnabled(true)//自动旋转 .setProgressiveRenderingEnabled(false)//是否支持渐进式加载 .build(); DraweeController draweeController= Fresco.newDraweeControllerBuilder() .setImageRequest(request) .setOldController(drawee.getController())//可节省不必要的内存 .setAutoPlayAnimations(true) .build(); drawee.setController(draweeController);}/** * 普通显示 * */public static void showFescoBitmap2(Context context,SimpleDraweeView drawee,String url,int drawId){ ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)) .setAutoRotateEnabled(true)//自动旋转 .setProgressiveRenderingEnabled(false)//是否支持渐进式加载 .build(); DraweeController draweeController= Fresco.newDraweeControllerBuilder() .setTapToRetryEnabled(true)//加载失败时,会重试4次 .setImageRequest(request) .setAutoPlayAnimations(true) .build(); GenericDraweeHierarchyBuilder builder =//用来设置加载失败,加载中,加载前图片,等效果 new GenericDraweeHierarchyBuilder(context.getResources()); GenericDraweeHierarchy hierarchy = builder .setFadeDuration(300) .setPlaceholderImage(context.getResources().getDrawable(drawId)) .setFailureImage(context.getResources().getDrawable(drawId)) // .setOverlays(overlaysList) .build(); drawee.setHierarchy(hierarchy); drawee.setController(draweeController);}/** * 显示圆角 * */public static void showFescoRoundBitmap(SimpleDraweeView draweeView,String url){ DraweeController draweeController2 = Fresco.newDraweeControllerBuilder().setUri(Uri.parse(url)).setAutoPlayAnimations(true).build(); draweeView.setController(draweeController2); RoundingParams mRoundParams2 = RoundingParams.fromCornersRadius(7f); mRoundParams2.setRoundAsCircle(true);//圆圈 - 设置roundAsCircle为true mRoundParams2.setBorder(Color.parseColor("#ffffff"),3);//显示边框的颜色 //mRoundParams2.setOverlayColor(Color.parseColor("#ffffff"));//用来绘制非圆角颜色 draweeView.getHierarchy().setRoundingParams(mRoundParams2);}/** * 解决图片缩放 * */public static void showFescoScrolBitmap(SimpleDraweeView draweeView,String url,int width,int height){ ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)) .setResizeOptions(new ResizeOptions(width, height)) .build(); PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder() .setOldController(draweeView.getController()) .setImageRequest(request) .build(); draweeView.setController(controller);}

转载于:https://my.oschina.net/u/2933456/blog/784563

你可能感兴趣的文章
什么是区块链?
查看>>
PHP-Phalcon框架中的数据库操作
查看>>
第16届电源技术专题研讨会
查看>>
Python web前端 05 JavaScript
查看>>
Hibernate(1) 阻抗不匹配
查看>>
如何才能留住员工
查看>>
Pascal常用函数
查看>>
LeetCode - 12. Integer to Roman
查看>>
Python——hashlib
查看>>
关于DB2 ORACLE MYSQL 数据库 where字句执行顺序问题
查看>>
Java+Selenium3.3.1环境搭建
查看>>
@responseBody注解的使用
查看>>
为什么in_array(0, ['a', 'b', 'c'])返回true
查看>>
CISCO 7204路由器SDH线路配置
查看>>
判断手机端还是pc端
查看>>
如何在MySQL中设置外键约束
查看>>
Squares 四边形数量,求坐标很重要
查看>>
Luence简单实现2
查看>>
instruction set汇总
查看>>
借助语义技术构建 Wikipedia 查询表单
查看>>