在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>