摘要:中設(shè)計(jì)有一個(gè)叫做模塊,它會(huì)在圖片加載完成前顯示占位圖,加載成功后自動(dòng)替換為目標(biāo)圖片。當(dāng)圖片不再顯示在屏幕上時(shí),它會(huì)及時(shí)地釋放內(nèi)存和空間占用。大的內(nèi)存占用勢(shì)必引發(fā)更加頻繁的。
Fresco圖片框架簡(jiǎn)介及使用
一. 特性介紹 1. Image PipelineFresco是FaceBook退出了一個(gè)Android開源圖片管理框架,它提供了圖片下載、漸進(jìn)式加載、內(nèi)存管理等功能,很大程度上把程序員從繁瑣的圖片管理工作中解放了出來,官網(wǎng)地址,F(xiàn)resco API。
Fresco 中設(shè)計(jì)有一個(gè)叫做 Image Pipeline 的模塊。它負(fù)責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時(shí)間,它含有3級(jí)緩存設(shè)計(jì)(2級(jí)內(nèi)存,1級(jí)磁盤)。
2. DraweesFresco 中設(shè)計(jì)有一個(gè)叫做 Drawees 模塊,它會(huì)在圖片加載完成前顯示占位圖,加載成功后自動(dòng)替換為目標(biāo)圖片。當(dāng)圖片不再顯示在屏幕上時(shí),它會(huì)及時(shí)地釋放內(nèi)存和空間占用。
3. 內(nèi)存管理解壓后的圖片,即Android中的Bitmap,占用大量的內(nèi)存。大的內(nèi)存占用勢(shì)必引發(fā)更加頻繁的GC。在5.0以下,GC將會(huì)顯著地引發(fā)界面卡頓。
在5.0以下系統(tǒng),F(xiàn)resco將圖片放到一個(gè)特別的內(nèi)存區(qū)域。當(dāng)然,在圖片不顯示的時(shí)候,占用的內(nèi)存會(huì)自動(dòng)被釋放。這會(huì)使得APP更加流暢,減少因圖片內(nèi)存占用而引發(fā)的OOM。
Fresco的Image Pipeline允許你用很多種方式來自定義圖片加載過程,比如:
為同一個(gè)圖片指定不同的遠(yuǎn)程路徑,或者使用已經(jīng)存在本地緩存中的圖片
先顯示一個(gè)低清晰度的圖片,等高清圖下載完之后再顯示高清圖
加載完成回調(diào)通知
對(duì)于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖
縮放或者旋轉(zhuǎn)圖片
對(duì)已下載的圖片再次處理
5. 圖片繪制Fresco 的 Drawees 設(shè)計(jì),帶來一些有用的特性:
自定義居中焦點(diǎn)
圓角圖,當(dāng)然圓圈也行
下載失敗之后,點(diǎn)擊重現(xiàn)下載
自定義占位圖,自定義overlay, 或者進(jìn)度條
指定用戶按壓時(shí)的overlay
6. 圖片的漸進(jìn)式呈現(xiàn)漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片,這對(duì)于移動(dòng)設(shè)備,尤其是慢網(wǎng)絡(luò)有極大的利好,可帶來更好的用戶體驗(yàn)。
Android 本身的圖片庫不支持此格式,但是Fresco支持。使用時(shí),和往常一樣,僅僅需要提供一個(gè)圖片的URI即可,剩下的事情,F(xiàn)resco會(huì)處理。
加載Gif圖和WebP動(dòng)圖在任何一個(gè)Android開發(fā)者眼里看來都是一件非常頭疼的事情。每一幀都是一張很大的Bitmap,每一個(gè)動(dòng)畫都有很多幀。Fresco讓你沒有這些煩惱,它處理好每一幀并管理好你的內(nèi)存。
支持WebP解碼,即使在早先對(duì)WebP支持不完善的Android系統(tǒng)上也能正常使用!
二、Fresco的簡(jiǎn)單使用 1. 在Gradle配置中加入Fresco的依賴dependencies { compile "com.facebook.fresco:fresco:0.14.1" }2. 在你的Application中初始化Fresco
public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
注冊(cè)MyApplication,并配置網(wǎng)絡(luò)權(quán)限
3. 在布局文件中使用Fresco自定義的圖片控件SimpleDraweeView,注意引入Fresco命名空間。
4.在Activity使用SimpleDraweeView,設(shè)置其Uri
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.drawee_img); Uri uri = Uri.parse("http://www.people.com.cn/mediafile/pic/20161022/76/4315084153778263996.jpg"); draweeView.setImageURI(uri); //initView(); }5.效果展示
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70568.html
摘要:首先這是對(duì)的源碼分析,所以在看這篇文章之前你應(yīng)該要有使用的基礎(chǔ),如果沒有的強(qiáng)烈推薦看下官方文檔。在中統(tǒng)一由來替代。關(guān)于后續(xù)文章會(huì)詳細(xì)分析。在其內(nèi)部的,是用來記錄事件的傳遞,方便的調(diào)試。這次主要是分析了中的基本組件與它的子類。 在Android中圖片加載的框架很多,例如:Fresco、Picasso、Glide與Imageloader。它們都有各自的優(yōu)點(diǎn),但總的來說,使用起來方便簡(jiǎn)單、可...
閱讀 3055·2023-04-26 02:27
閱讀 2770·2021-11-22 13:54
閱讀 909·2021-11-12 10:36
閱讀 3764·2021-10-09 09:44
閱讀 3186·2021-10-09 09:41
閱讀 1231·2021-09-22 10:02
閱讀 2842·2019-08-30 15:56
閱讀 3110·2019-08-30 11:02