類庫(kù)發(fā)布到了Maven中央庫(kù):
dependencies {
compile 'com.facebook.fresco:fresco:0.1.0+'
}
<dependency>
<groupId>com.facebook.fresco</groupId>
<artifactId>fresco</artifactId>
<version>LATEST</version>
</dependency>
~呵呵~
如果你僅僅是想簡(jiǎn)單下載一張網(wǎng)絡(luò)圖片,在下載完成之前,顯示一張占位圖,那么簡(jiǎn)單使用 SimpleDraweeView 即可。
在Application 初始化時(shí):
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
:
<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");
剩下的,F(xiàn)resco會(huì)替你完成:
等等等等。
Drawees 負(fù)責(zé)圖片的呈現(xiàn),包含幾個(gè)組件,有點(diǎn)像MVC模式。
繼承于 View, 負(fù)責(zé)圖片的顯示。
一般情況下,使用SimpleDraweeView
即可. 簡(jiǎn)單的用法,在這個(gè)頁(yè)面:開始使用 。
它支持很多自定義效果,參見這里: 自定義顯示效果.
繼承于 Drawable, 包含用于繪制的圖像數(shù)據(jù)。MVC中的M。
如果你想在Java代碼中自定義圖片的展示,可以通過(guò)這類實(shí)現(xiàn),具體的請(qǐng)參考這里: 在Java代碼中自定義顯示效果
DraweeController
負(fù)責(zé)和 image loader 交互(默認(rèn)是Fresco中 image pipeline),可以創(chuàng)建一個(gè)這個(gè)類的實(shí)例,來(lái)實(shí)現(xiàn)對(duì)所要顯示的圖片做更多的控制。
DraweeControllers
由 DraweeControllerBuilder
采用 Builder 模式創(chuàng)建,創(chuàng)建之后,不可修改。具體參見: 使用ControllerBuilder。
使用 ControllerListener 的一個(gè)場(chǎng)景就是設(shè)置一個(gè) Listener監(jiān)聽圖片的下載。
Fresco 的 Image Pipeline 負(fù)責(zé)圖片的獲取和管理。圖片可以來(lái)自遠(yuǎn)程服務(wù)器,本地文件,或者Content Provider,本地資源。壓縮后的文件緩存在本地存儲(chǔ)中,Bitmap數(shù)據(jù)緩存在內(nèi)存中。
在5.0系統(tǒng)之后,Image Pipeline 使用`pinned purgeables*將Bitmap數(shù)據(jù)存在native 內(nèi)存中。這要求圖片不使用時(shí),要顯示地釋放內(nèi)存。
SimpleDraweeView
自動(dòng)處理了這個(gè)釋放過(guò)程,所以沒有特殊情況,盡量使用SimpleDraweeView
,在特殊的場(chǎng)合,如果有需要,也可以直接控制Image Pipeline。
Fresco 支持許多URI格式。
特別注意:Fresco 不支持 相對(duì)路徑的URI. 所有的URI都必須是絕對(duì)路徑,并且?guī)显揢RI的scheme。
如下:
類型 | Scheme | 示例 |
---|---|---|
遠(yuǎn)程圖片 | http://,``https:// |
HttpURLConnection 或者參考 使用其他網(wǎng)絡(luò)加載方案 |
本地文件 | file:// |
FileInputStream |
Content provider | content:// |
ContentResolver |
asset目錄下的資源 | asset:// |
AssetManager |
res目錄下的資源 | res:// |
Resources.openRawResource |
注意,只有圖片資源才能使用在Imagepipeline中,比如(PNG)。其他資源類型,比如字符串,或者XML Drawable在Imagepipeline中沒有意義。所以加載的資源不支持這些類型。
像ShapeDrawable這樣聲明在XML中的drawable可能引起困惑。注意到這畢竟不是圖片,如果想把這樣的drawable作為圖像顯示。
那么把這個(gè)drawable設(shè)置為占位圖,然后把URI設(shè)置為null。
更多建議: