Fresco是一個強大的系統用于在Android應用中展示圖片,它能夠從網絡、本地存儲和本地資源中加載圖片。它擁有三級緩存,Fresco在顯示方面是用了Drawees,可以顯示占位符,直到圖片加載完成。
> 本教程內容來源于 [fresco 中文網](http://fresco-cn.org/)
> 英文官網Fresco:[http://frescolib.org/](http://frescolib.org/)
Fresco 是一個強大的系統用于在 Android 應用中展示圖片,它能夠從網絡、本地存儲和本地資源中加載圖片。它擁有三級緩存,Fresco 在顯示方面是用了 Drawees,可以顯示占位符,直到圖片加載完成。
Fresco 是一個強大的圖片加載組件。
Fresco 中設計有一個叫做 image pipeline 的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。為了最大限度節省空間和 CPU 時間,它含有 3 級緩存設計(2 級內存,1 級文件)。
Fresco 中設計有一個叫做 Drawees 模塊,方便地顯示 loading 圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間占用。
Fresco 支持 Android2.3(API level 9) 及其以上系統。
## 特性
### 內存管理
一個沒有未壓縮的圖片,即 Android 中的 Bitmap,占用大量的內存。大的內存占用勢必引發更加頻繁的 GC。在 5.0 以下,GC 將會顯著地引發界面卡頓。
在 5.0 以下系統,Fresco 將圖片放到一個特別的內存區域。當然,在圖片不顯示的時候,占用的內存會自動被釋放。這會使得 APP 更加流暢,減少因圖片內存占用而引發的 OOM。
Fresco 在低端機器上表現一樣出色,你再也不用因圖片內存占用而思前想后。
### 圖片的漸進式呈現
漸進式的 JPEG 圖片格式已經流行數年了,漸進式圖片格式先呈現大致的圖片輪廓,然后隨著圖片下載的繼續,呈現逐漸清晰的圖片,這對于移動設備,尤其是慢網絡有極大的利好,可帶來更好的用戶體驗。
Android 本身的圖片庫不支持此格式,但是 Fresco 支持。使用時,和往常一樣,僅僅需要提供一個圖片的 URI 即可,剩下的事情,Fresco 會處理。
### Gif 圖和 WebP 格式
是的,支持加載 Gif 圖,支持 WebP 格式。
#### 圖像的呈現
Fresco 的 Drawees 設計,帶來一些有用的特性:
- 自定義居中焦點(對人臉等圖片顯示非常有幫助)
- 圓角圖,當然圓圈也行。
- 下載失敗之后,點擊重現下載
- 自定義占位圖,自定義overlay, 或者進度條
- 指定用戶按壓時的overlay
#### 圖像的加載
Fresco 的 image pipeline 設計,允許用戶在多方面控制圖片的加載:
- 為同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片
- 先顯示一個低解析度的圖片,等高清圖下載完之后再顯示高清圖
- 加載完成回調通知
- 對于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖
- 縮放或者旋轉圖片
- 處理已下載的圖片
- WebP 支持