当下最常用的图片加载框架是:Gilde,Fresco,Picasso。Fresco是Facebook提供的开源图片加载库,它能够从网络,本地存储和Android资源文件中加载图片,且具有三级缓存设计(2级内存,1级文件)。Fresco中实现了各种加载过程以及加载后的图片绘制,整体都很强大。所以准备来好好学学这个框架啦。
Frescp框架的设计主要采用的是MVC模式。DraweeView实现了View的功能,DraweeHierarchy实现了Model的功能,DraweeController实现Controller的功能。
基本用法
首先在build.gradle中添加依赖,目前已经更新到1.8.1版本了:
dependencies {
// 在 API < 14 上的机器支持 WebP 时,需要添加
//compile 'com.facebook.fresco:animated-base-support:1.8.1'
// 支持 GIF 动图,需要添加
//compile 'com.facebook.fresco:animated-gif:1.8.1'
// 支持 WebP (静态图+动图),需要添加
//compile 'com.facebook.fresco:animated-webp:1.8.1'
//compile 'com.facebook.fresco:webpsupport:1.8.1'
// 仅支持 WebP 静态图,需要添加
compile 'com.facebook.fresco:webpsupport:1.8.1'
}
在Android studio会自动下载相应的依赖包。
在进行图片加载之前,需要配置Fresco类,Fresco.initialize只需要调用一次,所以我们在Application中进行初始化:
public class MyApplication extends Application {
@Override
public void onCreate(){
super.onCreate();
Fresco.initialize(this);
}
}
在AndroidManifest.xml中配置MyApplication,如果要从网络下载图片,还需要添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MyApplication"
...
</application>
在xml中配置SimpleDraweeView
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/id_main_sdv"
android:layout_width="20dp"
android:layout_height="20dp"
fresco:placeholderImage="@drawable/imgbg"
/>
在Activity中加载图片:
SimpleDraweeView sdv = (SimpleDraweeView) findViewById(R.id.id_main_sdv);
Uri uri = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1523079111408&di=7783555b20885592a8034c6e729a6414&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01ea90595f5ca4a8012193a3d93648.jpeg");
sdv.setImageURI(uri);
接下来就是等待Fresco下载完图片并展示出来了。
XML中配置使用Drawees
一个大致的XML配置例示如下:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/id_main_sdv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
fresco:actualImageScaleType="focusCrop" //加载得到的图片的缩放类型
fresco:fadeDuration="1000" //进度条,占位图片消失,加载图片展现的时间间隔
fresco:failureImage="@drawable/imgbg" //加载失败之后显示的图片
fresco:failureImageScaleType="centerInside" //图片缩放类型
fresco:placeholderImage="