Android-->Facebook图片加载库Fresco(爱它的理由)

在Android中,图片加载框架很多,很多,很多…都是经典,爆款.

也许你在用:
https://github.com/square/picasso
https://github.com/bumptech/glide
https://github.com/nostra13/Android-Universal-Image-Loader/
https://github.com/koush/UrlImageViewHelper
等等,
但是都阻止不了,我爱https://github.com/facebook/fresco/它的理由;

Fresco 的 Image Pipeline 负责图片的获取和管理。图片可以来自远程服务器,本地文件,或者Content Provider,本地资源。压缩后的文件缓存在本地存储中,Bitmap数据缓存在内存中。

在5.0系统以下,Image Pipeline 使用 pinned purgeables 将Bitmap数据避开Java堆内存,存在ashmem中。这要求图片不使用时,要显式地释放内存。

SimpleDraweeView自动处理了这个释放过程,所以没有特殊情况,尽量使用SimpleDraweeView,在特殊的场合,如果有需要,也可以直接控制Image Pipeline。

了解它,从官网开始: http://fresco-cn.org/docs/getting-started.html

使用方法:

//1:添加依赖
compile 'com.facebook.fresco:fresco:0.14.0'
//2.调用初始化方法,推荐在Application方法.切记此方法必须调用.
Fresco.initialize(this);

显示本地/网络/资源图片:

//显示方法只有这一个函数.不同的就是参数url...
simpleDraweeView.setImageURI(Uri.parse(url));

//网络图片: 直接使用网络url地址
String url = "http://mvimg1.meitudata.com/559e50975a5039607.jpg";//即可

//Res资源图片
String url = "res://" + getPackageName() + "/" + R.mipmap.ic_launcher;//注意要添加包名

//文章后面有所有支持的uri类型.

圆形/圆角图片:

"true" //圆形图片
    app:roundedCornerRadius="10dp" //圆角
    android:layout_width="40dp"
    android:layout_height="40dp" />
//圆形图片
RoundingParams roundingParams = RoundingParams.asCircle();
draweeView.getHierarchy().setRoundingParams(roundingParams);
RoundingParams roundingParams = RoundingParams.fromCornersRadius(10);//圆角图片
roundingParams.setRoundAsCircle(true);//圆形图片
draweeView.getHierarchy().setRoundingParams(roundingParams);

占位图片,失败图片,加载进度

"@mipmap/fail_image"   //失败图片
   app:placeholderImage="@mipmap/placeholder_image" //占位图片
   app:progressBarImage="@mipmap/progress_bar" //进度图片
   app:retryImage="@mipmap/retry_image"/>  //重试图片
//对应代码设置:
final GenericDraweeHierarchy hierarchy = simpleDraweeView.getHierarchy();
hierarchy.setProgressBarImage(R.mipmap.progress_bar);
hierarchy.setFailureImage(R.mipmap.fail_image);
hierarchy.setPlaceholderImage(R.mipmap.placeholder_image);
hierarchy.setRetryImage(R.mipmap.retry_image);

请注意:
不要使用wrap_content, 尽量使用match_parent或者具体的尺寸.
原因你可以看这里:http://fresco-cn.org/docs/wrap-content.html


支持的URI

类型 SCHEME 示例
远程图片 http://, https:// HttpURLConnection 或者参考 使用其他网络加载方案
本地文件 file:// FileInputStream
Content provider content:// ContentResolver
asset目录下的资源 asset:// AssetManager
res目录下的资源 res:// Resources.openRawResource
Uri中指定图片数据 data:mime/type;base64, 数据类型必须符合 rfc2397规定 (仅支持 UTF-8)

所有属性参考:
https://github.com/facebook/fresco/blob/master/drawee/src/main/res/values/attrs.xml

<resources>
  <declare-styleable name="GenericDraweeHierarchy">

    
    <attr name="fadeDuration" format="integer"/>

    
    <attr name="viewAspectRatio" format="float"/>

    

    
    <attr name="placeholderImage" format="reference"/>
    
    <attr name="placeholderImageScaleType">
      <enum name="none" value="-1" />
      <enum name="fitXY" value="0" />
      <enum name="fitStart" value="1" />
      <enum name="fitCenter" value="2" />
      <enum name="fitEnd" value="3" />
      <enum name="center" value="4" />
      <enum name="centerInside" value="5" />
      <enum name="centerCrop" value="6" />
      <enum name="focusCrop" value="7" />
    attr>

    
    <attr name="retryImage" format="reference"/>
    
    <attr name="retryImageScaleType">
      <enum name="none" value="-1" />
      <enum name="fitXY" value="0" />
      <enum name="fitStart" value="1" />
      <enum name="fitCenter" value="2" />
      <enum name="fitEnd" value="3" />
      <enum name="center" value="4" />
      <enum name="centerInside" value="5" />
      <enum name="centerCrop" value="6" />
      <enum name="focusCrop" value="7" />
    attr>

    
    <attr name="failureImage" format="reference"/>
    
    <attr name="failureImageScaleType">
      <enum name="none" value="-1" />
      <enum name="fitXY" value="0" />
      <enum name="fitStart" value="1" />
      <enum name="fitCenter" value="2" />
      <enum name="fitEnd" value="3" />
      <enum name="center" value="4" />
      <enum name="centerInside" value="5" />
      <enum name="centerCrop" value="6" />
      <enum name="focusCrop" value="7" />
    attr>

    
    <attr name="progressBarImage" format="reference"/>
    
    <attr name="progressBarImageScaleType">
      <enum name="none" value="-1" />
      <enum name="fitXY" value="0" />
      <enum name="fitStart" value="1" />
      <enum name="fitCenter" value="2" />
      <enum name="fitEnd" value="3" />
      <enum name="center" value="4" />
      <enum name="centerInside" value="5" />
      <enum name="centerCrop" value="6" />
      <enum name="focusCrop" value="7" />
    attr>
    
    <attr name="progressBarAutoRotateInterval" format="integer"/>

    
    <attr name="actualImageScaleType">
      <enum name="none" value="-1" />
      <enum name="fitXY" value="0" />
      <enum name="fitStart" value="1" />
      <enum name="fitCenter" value="2" />
      <enum name="fitEnd" value="3" />
      <enum name="center" value="4" />
      <enum name="centerInside" value="5" />
      <enum name="centerCrop" value="6" />
      <enum name="focusCrop" value="7" />
    attr>

    
    <attr name="backgroundImage" format="reference"/>

    
    <attr name="overlayImage" format="reference"/>

    
    <attr name="pressedStateOverlayImage" format="reference"/>

    

    
    <attr name="roundAsCircle" format="boolean"/>
    
    <attr name="roundedCornerRadius" format="dimension"/>
    
    <attr name="roundTopLeft" format="boolean"/>
    
    <attr name="roundTopRight" format="boolean"/>
    
    <attr name="roundBottomRight" format="boolean"/>
    
    <attr name="roundBottomLeft" format="boolean"/>
    
    <attr name="roundWithOverlayColor" format="color"/>
    
    <attr name="roundingBorderWidth" format="dimension"/>
    
    <attr name="roundingBorderColor" format="color"/>
    
    <attr name="roundingBorderPadding" format="dimension" />

  declare-styleable>

  <declare-styleable name="SimpleDraweeView">

    
    <attr name="actualImageUri" format="string"/>

  declare-styleable>

resources>

你可能感兴趣的:(Android)