Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。相对于ImageLoader,拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势,是个很好的图片框架。PS:毕竟是facebook开源的,我说差也不会有人相信,还是夸夸吧!
首先体验其最基本的用法:
1.导入 Android Studio 或者 Gradle
dependencies {
compile 'com.facebook.fresco:fresco:0.9.0+'
}
注意:1、在SimpleDraweeView的父控件或者根节点中配置
xmlns:fresco="http://schemas.android.com/apk/res-auto";
3、在Java代码中开始加载图片2、配置网络权限
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
接下来详细研究其用法:
URIs的使用:
类型 | Scheme | 示例 |
---|---|---|
远程图片 | http://, https:// |
HttpURLConnection 或者参考 使用其他网络加载方案 |
本地文件 | file:// |
FileInputStream |
Content provider | content:// |
ContentResolver |
asset目录下的资源 | asset:// |
AssetManager |
res目录下的资源 | res:// |
Resources.openRawResource |
res 示例:Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher);
注意:Fresco 不支持 相对路径的URI. 所有的URI都必须是绝对路径,并且带上该URI的scheme。在XML中使用SimpleDraweeView:
给出一个完整的示例:
说明:必须声明 android:layout_width 和 android:layout_height,否则将无法正确加载图像,另外不支持 wrap_content 属性,但也有例外的时候,如果想固定控件的宽高比,则可以使用wrap_content,并通过在xml代码中设置
fresco:viewAspectRatio="小数"或者在Java代码中设置
mSimpleDraweeView.setAspectRatio(1.33f);即可。
在Java中自定义显示图
一般情况下,在XML设置显示效果即可, 如果想更多定制化,可以这样:
创建一个 builder 然后设置给 SimpleDraweeView:
List backgroundsList;
List overlaysList;
GenericDraweeHierarchyBuilder builder =
new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(300)
.setPlaceholderImage(new MyCustomDrawable())
.setBackgrounds(backgroundList)
.setOverlays(overlaysList)
.build();
mSimpleDraweeView.setHierarchy(hierarchy);
注意:请不要多次调用setHierarchy,即使这个View是可回收的。创建 DraweeHierarchy 的较为耗时的一个过程,应该多次利用。
修改 DraweeHierarchy
DraweeHierarchy 的一些属性可以在运行时改变。
要改变这些属性,首先获取一个引用:
GenericDraweeHierarchy hierarchy = mSimpleDraweeView.getHierarchy();
修改占位图
修改占位图为资源id:hierarchy.setPlaceholderImage(R.drawable.placeholderId);
或者修改为一个 Drawable:Drawable drawable; hierarchy.setPlaceholderImage(drawable);
改变图像的显示
修改缩放类型:
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);
如果你选择缩放类型为 focusCrop,需要指定一个居中点:hierarchy.setActualImageFocusPoint(point);
你可以为图像添加一个 color filter:
ColorFilter filter;
// 创建filter
hierarchy.setActualImageColorFilter(filter);
圆角
除了圆角显示方式(原来为圆角的不能修改为圆圈,反之亦然),其他圆角相关的呈现参数, 具体参见这里 是可以动态修改的。
如下: 获取DraweeHierarchy的圆角显示参数,修改圆角半径为10。
RoundingParams roundingParams = hierarchy.getRoundingParams();
roundingParams.setCornersRadius(10);
hierarchy.setRoundingParams(roundingParams);
OK,到此就已经掌握了Fresco的基础用法,接一下的一篇会研究Fresco的一些高阶功能及技巧。