异步图片加载Fresco v/s Universal Image Loader (UIL)
在开发中我们经常会接触到图片的加载,图片加载是一个比较头疼的问题,你可以要考虑到图片的异步加载,图片的缓存处理、
图片的压缩处理等等,所以今天总结对比一下自己用过的2个开源图片框架,一个是大名鼎鼎的facebook出的fresco,
另外一个是使用人最多的Universal Image Loader (以下简称UIL),当然还有几款比较有名的图片框架,比如square的Picasso,鄙人没用过就不做比较了。
官方 Official
Fresco
官方文档
http://fresco-cn.org/
Github
https://github.com/facebook/fresco
Gradle
compile ‘com.facebook.fresco:fresco:0.6.0+’
UIL
Github
https://github.com/nostra13/Android-Universal-Image-Loader
Gradle
UIL没有上传在maven里面 所以得导jar包,可以在github上下载jar包
使用
Fresco
使用起来非常简单
1
| Fresco.initialize(context);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="20dp" android:layout_height="20dp" 注意DraweeView不支持wrap_content fresco:fadeDuration="300" fresco:actualImageScaleType="focusCrop" 缩放形式 fresco:placeholderImage="@color/wait_color" 临时安放的图片 fresco:placeholderImageScaleType="fitCenter" fresco:failureImage="@drawable/error" 加载失败的图片 fresco:failureImageScaleType="centerInside" fresco:retryImage="@drawable/retrying" 重试的图片 fresco:retryImageScaleType="centerCrop" fresco:progressBarImage="@drawable/progress_bar" 加载进度时候的图片 fresco:progressBarImageScaleType="centerInside" fresco:progressBarAutoRotateInterval="1000" fresco:backgroundImage="@color/blue" fresco:overlayImage="@drawable/watermark" 叠加的图片 fresco:pressedStateOverlayImage="@color/red" 按下去时候的图片 fresco:roundAsCircle="false" 图片是否是圆形 fresco:roundedCornerRadius="1dp" 图片圆角角度 fresco:roundTopLeft="true" fresco:roundTopRight="false" fresco:roundBottomLeft="false" fresco:roundBottomRight="true" fresco:roundWithOverlayColor="@color/corner_color" fresco:roundingBorderWidth="2dp" 圆角边框宽度 fresco:roundingBorderColor="@color/border_color" 圆角边框颜色 />
|
1 2
| SimpleDraweeView draweeView = (SimpleDraweeView)findViewById(R.id.my_image_view); draweeView.setImageURI(Uri.parse("http://www.baidu.com/1.jpg"));
|
剩下的,Fresco会替你完成:
- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除; etc
Fresco含有的特点是:
- focusCrop缩放属性,可以支持人脸识别(让你的脸居中显示)
- 默认的渐进式加载效果(这个超级棒)
- 圆角/圆形图
- 加载进度条
- 支持Gif图片
- 修改图片(比如下载完加一个logo在上面,比如微博的图片)
UIL
导入jar包
用起来也非常简单
1 2 3
| ImageView imageView = (ImageView)findViewById(R.id.imageView); ImageLoader.getInstance().displayImage("http://www.baidu.com/1.jpg", imageView);
|
对比
首先我们来看一张图
这种图对比了时下流行的4种框架的异同,从表层来说,Fresco 自己定义了自己的View来配合加载,UIL则允许用户使用系统的View来加载
问题总结
- Fresco 可能会于百度地图发生冲突
- Fresco 在IDE布局预览的时候可能会有问题
- UIL 的在处理圆角边框缩放可能需要自己写View