官方网站:http://fresco-cn.org/
为什么使用Fresco:
Fresco 会替我们完成,显示占位图直到加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出;
注意Fresco的图片的宽高一定不能都是wrap_content,如果都是的话就不会显示图片了0: 首先需要导入Frsco的包
1: 然后需要添加网络的访问权限
++++++++++++++++++++++++++++++++++++2: 然后新建一个Application 在这个里面执行Fresco.initialize(context)的初始化
3:然后在xml 的布局文件中,加入命名空间xmlns:android="http://schemas.android.com/apk/res/android"xmlns:fresco="http://schemas.android.com/apk/res-auto"
4:在布局中加入SimpleDraweeView,注意这里的placeholderImage 是用来显示站位图的。
<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_image_view"android:layout_width="20dp"android:layout_height="20dp"fresco:placeholderImage="@drawable/my_drawable"/>5: setImageURI()的方法来添加图片。
剩下的Fresco 会替我们完成,显示占位图知道加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出。6:其中setImageURI(),
如果是网络上面的图片直接就是Uri.parse(网址),
如果是包里面的文件就是使用res://mipmap/+R.mipmap.yoyo
如果是android 手机目录中的文件就要使用file:///data/data/com.example.xue.frescodemo/files/345.jpg 注意 file是三条杠如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));7:还可以设置进度条:使用的方法是setProgressBarImage
++++++++++++++++++++++++++++++++++++++++++++++
笔记:
如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)
draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));
要设置进度条:
要显示进度,最简单的办法就是在 构建 hierarchy 时使用 ProgressBarDrawable,如下:
.setProgressBarImage(new ProgressBarDrawable())
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy genericDraweeHierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();
GenericDraweeHierarchyBuilder builder_res = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy genericDraweeHierarchy_res = builder_res.setProgressBarImage(new ProgressBarDrawable()).build();
draweeView_url.setHierarchy(genericDraweeHierarchy);
draweeView_res.setHierarchy(genericDraweeHierarchy_res);
设置缓存:
/**
* Created by XUE on 2015/12/30.
*/
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {
@Override
public MemoryCacheParams get() {
return new MemoryCacheParams(20<<20,
100,
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE
);
}
}).setMainDiskCacheConfig(DiskCacheConfig.newBuilder()
.setMaxCacheSize(50<<20)
.setBaseDirectoryPath(getCacheDir())
.setBaseDirectoryName("fresco")
.build())
.setBitmapsConfig(Bitmap.Config.RGB_565)
.build();
Fresco.initialize(this);
}
}
引入Fresco
1. Android Studio 或者 Gradle
dependencies {
compile 'com.facebook.fresco:fresco:0.6.0+'
}
开始使用 Fresco
如果你仅仅是想简单下载一张网络图片,在下载完成之前,显示一张占位图,那么简单使用SimpleDraweeView 即可。
为了下载网络图片,请确保在 AndroidManifest.xml
中有以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
在 Application 初始化时,在应用调用 setContentView()
之前,进行初始化:(这里需要自己自定义Application,然后在清单文件中指定)
Fresco.initialize(context);
在xml布局文件中, 加入命名空间:
<!-- 其他元素 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:fresco="http://schemas.android.com/apk/res-auto">
加入SimpleDraweeView
:
<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_image_view"android:layout_width="20dp"android:layout_height="20dp"fresco:placeholderImage="@drawable/my_drawable"/>
开始加载图片
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);
剩下的,Fresco会替你完成:
- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除;
关键概念
Drawees
Drawees 负责图片的呈现,包含几个组件,有点像MVC模式。
DraweeView
继承于 View, 负责图片的显示。
一般情况下,使用SimpleDraweeView
即可. 简单的用法,在这个页面:开始使用 。
它支持很多自定义效果,参见这里: 自定义显示效果.