第 1 章 配置和使用

下载Fresco

类库发布到了Maven中央库:

Gradle:

dependencies {
  compile "com.facebook.fresco:fresco:0.1.0+"
}

Maven:

<dependency>
  <groupId>com.facebook.fresco</groupId>
  <artifactId>fresco</artifactId>
  <version>LATEST</version>
</dependency>

Eclipse


## 配置和开始使用

如果你仅仅是想简单下载一张网络图片,在下载完成之前,显示一张占位图,那么简单使用 SimpleDraweeView 即可。

在Application 初始化时:

~~~java
Fresco.initialize(context);~~~

在xml布局文件中, 加入命名空间:

~~~xml
<!-- 其他元素 -->
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">
~~~

加入`SimpleDraweeView`:

~~~xml
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:placeholderImage="@drawable/my_drawable"
  />
~~~

开始加载图片

~~~
draweeView.setImageURI("http://site.com/uri");
~~~

剩下的,Fresco会替你完成:

- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除;

等等等等。

## 关键概念

### Drawees

Drawees 负责图片的呈现,包含几个组件,有点像MVC模式。

#### DraweeView

继承于 [View](http://developer.android.com/reference/android/view/View.html), 负责图片的显示。

一般情况下,使用`SimpleDraweeView` 即可. 简单的用法,在这个页面:[开始使用](#) 。

它支持很多自定义效果,参见这里: [自定义显示效果](#).

#### DraweeHierarchy

继承于 Drawable, 包含用于绘制的图像数据。MVC中的M。

如果你想在Java代码中自定义图片的展示,可以通过这类实现,具体的请参考这里: [在Java代码中自定义显示效果](#)

#### DraweeController

`DraweeController` 负责和 image loader 交互(默认是Fresco中 image pipeline),可以创建一个这个类的实例,来实现对所要显示的图片做更多的控制。

#### DraweeControllerBuilder

`DraweeControllers` 由 `DraweeControllerBuilder` 采用 Builder 模式创建,创建之后,不可修改。具体参见: [使用ControllerBuilder](#)。

#### Listeners

使用 ControllerListener 的一个场景就是设置一个 [Listener](#)监听图片的下载。

### Image Pipeline

Fresco 的 Image Pipeline 负责图片的获取和管理。图片可以来自远程服务器,本地文件,或者Content Provider,本地资源。压缩后的文件缓存在本地存储中,Bitmap数据缓存在内存中。

在5.0系统之后,Image Pipeline 使用`pinned purgeables*将Bitmap数据存在native 内存中。这要求图片不使用时,要显示地释放内存。

`SimpleDraweeView` 自动处理了这个释放过程,所以没有特殊情况,尽量使用`SimpleDraweeView`,在特殊的场合,如果有需要,也可以直接控制Image Pipeline。

## 支持的URIs

Fresco 支持许多URI格式。

特别注意:Fresco **不支持** 相对路径的URI. 所有的URI都必须是绝对路径,并且带上该URI的scheme。

如下:

| 类型 | Scheme | 示例 | 
|-----|-----|-----|
| 远程图片 | `http://,``https://` | `HttpURLConnection` 或者参考 [使用其他网络加载方案](#) | 
| 本地文件 | `file://` | `FileInputStream` | 
| Content provider | `content://` | `ContentResolver` | 
| asset目录下的资源 | `asset://` | `AssetManager` | 
| res目录下的资源 | `res://` | `Resources.openRawResource` | 

  

注意,只有图片资源才能使用在Imagepipeline中,比如(PNG)。其他资源类型,比如字符串,或者XML Drawable在Imagepipeline中没有意义。所以加载的资源不支持这些类型。

像ShapeDrawable这样声明在XML中的drawable可能引起困惑。注意到这毕竟不是图片,如果想把这样的drawable作为图像显示。

那么把这个drawable设置为占位图,然后把URI设置为null。
文章导航