博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 开发 图片网络缓存加载框架Fresco
阅读量:5124 次
发布时间:2019-06-13

本文共 2331 字,大约阅读时间需要 7 分钟。

简介

  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  阅读(
...) 评论(
...) 收藏

转载于:https://www.cnblogs.com/guanxinjing/p/10364380.html

你可能感兴趣的文章
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
php match_model的简单使用
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
待整理
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
hihocoder1187 Divisors
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
前端监控
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
springboot No Identifier specified for entity的解决办法
查看>>