是什么藐石?
Fresco是一個強(qiáng)大的圖片加載組件,里面封裝了圖片的加載和顯示這些繁瑣的事情绸吸,我們只需要直接拿過來用即可婉烟,不需要再去考慮加載大量圖片處理不當(dāng)引起的頁面卡頓的問題娩井,支持Android2.3及以后的版本。
包含2個模塊:
* Image Pipeline:
支持從網(wǎng)絡(luò)似袁、本地文件系統(tǒng)洞辣、本地資源加載圖片咐刨,內(nèi)含3級緩存設(shè)計(2級內(nèi)存,1級磁盤))扬霜,最大限度的節(jié)省了空間和CPU的處理時間定鸟。
* Drawees:
在圖片加載完整前顯示占位圖,加載成功之后自動替換為目標(biāo)圖片著瓶,加載失敗可以設(shè)置需要顯示的加載失敗的圖片联予;當(dāng)圖片不在顯示在屏幕上時,它會及時的釋放內(nèi)存和占用空間材原。
特性:
內(nèi)存管理:
解壓后的圖片沸久,即Android中的Bitmap,占用大量的內(nèi)存余蟹,大量的內(nèi)存占用勢必會引發(fā)頻繁的GC卷胯,GC將會顯著地引發(fā)界面卡頓,在5.0以下威酒,F(xiàn)resco將圖片放在一個特別的內(nèi)存區(qū)域窑睁,在這些圖片不顯示之后及時的釋放內(nèi)存,這會使得APP更加流暢(在低端機(jī)上表現(xiàn)一樣出色)兼搏,減少因?yàn)閳D片內(nèi)存占用而引發(fā)的OOM卵慰。
圖片加載:
Fresco的Image Pipeline允許你用很多種方式來自定義圖片加載過程,比如:
? 為同一個圖片指定不同的遠(yuǎn)程路徑佛呻,或者使用已經(jīng)存在本地緩存中的圖片
? 先顯示一個低清晰度的圖片,等高清圖下載完之后再顯示高清圖
? 加載完成回調(diào)通知
? 對于本地圖病线,如有EXIF縮略圖吓著,在大圖加載完成之前,可先顯示縮略圖
? 縮放或者旋轉(zhuǎn)圖片
? 對已下載的圖片再次處理
? 支持WebP解碼送挑,即使在早先對WebP支持不完善的Android系統(tǒng)上也能正常使用绑莺!
圖片繪制:
* 自定義居中焦點(diǎn)
* ?圓角圖,圓圈也可以
* 下載失敗之后惕耕,點(diǎn)擊重現(xiàn)下載
* 自定義占位圖纺裁,自定義overlay,或者進(jìn)度條
* ?制定按壓時候的overlay
圖片的漸進(jìn)式的呈現(xiàn):
漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了司澎,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓欺缘,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片挤安,這對于移動設(shè)備谚殊,尤其是慢網(wǎng)絡(luò)有極大的利好,可帶來更好的用戶體驗(yàn)蛤铜。
Android 本身的圖片庫不支持此格式嫩絮,但是Fresco支持丛肢。使用時,和往常一樣剿干,僅僅需要提供一個圖片的URI即可蜂怎,剩下的事情,F(xiàn)resco會處理置尔。
動畫加載:
支持Gif圖和WebP動畫杠步,他能很好的處理每一幀圖片及內(nèi)存問題。
如何使用:
* ?添加gradle依賴:
compile 'com.facebook.fresco:fresco:0.10.0'
* ?在工程的Application的OnCreate( )方法中初始化:
* ?在布局文件中需要顯示圖片的位置使用心得控件來代替:
備注:屬性中存在fresco:開頭的聲明撰洗。這個是fresco的自定義屬性篮愉,如果我們需要使用其自定義屬性,必須在我們的xml根布局中添加聲明/命名空間差导,見下圖:
Fresco控件屬性:
fresco:actualImageScaleType="focusCrop"
// 設(shè)置圖片縮放. 通常使用focusCrop,該屬性值會通過算法把人頭像放在中間
fresco:placeholderImageScaleType="fitCenter"
fresco:placeholderImage="@color/wait_color"
// 下載成功之前顯示的圖片
fresco:failureImage=“@drawable/error"
fresco:failureImageScaleType="centerInside"
// 加載失敗的時候顯示的圖片
fresco:retryImageScaleType="centerCrop"
fresco:retryImage="@drawable/retrying"
// 加載失敗,提示用戶點(diǎn)擊重新加載的圖片(會覆蓋failureImage的圖片)
fresco:progressBarImage=“@drawable/progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
// 提示用戶正在加載,和加載進(jìn)度無關(guān)
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle="false"
// 是不是設(shè)置圓圈
* 代碼中的使用:
到此就完成啦试躏!