异步图片加载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

使用起来非常简单

Fresco.initialize(context);//初始化

<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" 圆角边框颜色
  />
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包
用起来也非常简单

ImageView imageView = (ImageView)findViewById(R.id.imageView);
ImageLoader.getInstance().displayImage("http://www.baidu.com/1.jpg", imageView);//搞定
//如果需要修改默认配置参数,可以设置option 具体参考文档

对比
首先我们来看一张图

这种图对比了时下流行的4种框架的异同,从表层来说,Fresco 自己定义了自己的View来配合加载,UIL则允许用户使用系统的View来加载

问题总结

  • Fresco 可能会于百度地图发生冲突
  • Fresco 在IDE布局预览的时候可能会有问题
  • UIL 的在处理圆角边框缩放可能需要自己写View

你可能感兴趣的:(android)