简介
Fresco是一个在Android应用程序中显示图像的强大系统。
Fresco负责图像的加载和显示。它将从网络、本地存储或本地资源加载图像,图像加载完成前会显示一个占位图片。它有两个级别的缓存:一个在内存中,另一个在内部存储器中。
在android 4.x及更低版本中,Fresco将图像放在android内存的一个特殊区域。这可以让您的应用程序运行得更快,减少因为内存不足的错误。
github地址:
Fresco还支持:- 渐进式JPEG流
- 显示动画gif和webp
- 图像加载和显示的广泛定制(将图片变成圆形或者用有圆角的矩形)
- 图片加载中的占位图、加载失败的占位图、重新加载的占位图
依赖
implementation 'com.facebook.fresco:fresco:1.12.1'
使用说明
在官方的网站中提供非常详细的使用说明,并且是中文文档,直接查看即可。下面只提供一些简单的基本属性与使用说明。
基本属性说明
图片尺寸缩放类型
- 类型描述
- center居中,无缩放
- centerCrop保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。
- focusCrop同centerCrop, 但居中点不是中点,而是指定的某个点
- centerInside使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。
- fitCenter保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示
- fitStart同上。但不居中,和显示边界左上对齐
- fitEnd同fitCenter, 但不居中,和显示边界右下对齐
- fitXY不保存宽高比,填充满显示边界
- none如要使用tile mode显示, 需要设置为none
基本的加载网络图片
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);draweeView.setImageURI(uri);
先显示低分辨率的图,然后是高分辨率的图
假设你要显示一张高分辨率的图,但是这张图下载比较耗时。与其一直显示占位图,你可能想要先下载一个较小的缩略图。
这时,你可以设置两个图片的URI,一个是低分辨率的缩略图,一个是高分辨率的图。
Uri lowResUri, highResUri;DraweeController controller = Fresco.newDraweeControllerBuilder() .setLowResImageRequest(ImageRequest.fromUri(lowResUri)) .setImageRequest(ImageRequest.fromUri(highResUri)) .setOldController(mSimpleDraweeView.getController()) .build();mSimpleDraweeView.setController(controller);
动图无法在低分辨率那一层显示。
加载显示本地图片
类型 | Scheme | 示例 |
---|---|---|
远程图片 | http://, https:// | HttpURLConnection 或者参考 |
本地文件 | file:// | FileInputStream |
Content provider | content:// | ContentResolver |
asset目录下的资源 | asset:// | AssetManager |
res目录下的资源 | res:// | Resources.openRawResource |
Uri中指定图片数据 | data:mime/type;base64, | 数据类型必须符合 (仅支持 UTF-8) |
用法demo:
demo1:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher);
demo2:
Uri uri = Uri.parse("res://com.xxx.xxx/" + R.mipmap.photo);userIcon.setImageURI(uri);
demo3:
Uri imageUri = Uri.parse("file://"+filePath);image.setImageURI(imageUri);
另外,Fresco还有一个功能,它是支持自动显示视频缩略图的.只要使用直接把视频路径导入就行.
容易忽略的坑
别忘记初始化
使用Fresco需要初始化,建议是在基类里初始化
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }}
别忘记添加xml属性命名
posted on 2019-02-12 11:14 阅读( ...) 评论( ...) 收藏