鍍金池/ 教程/ Android/ 多圖請(qǐng)求及圖片復(fù)用
進(jìn)度條
在JAVA代碼中使用Drawees
Drawee的各種效果配置
緩存
一些陷阱
關(guān)于在Android Studio中編譯
多圖請(qǐng)求及圖片復(fù)用
自定義網(wǎng)絡(luò)加載
支持的URIs
可關(guān)閉的引用
監(jiān)聽下載事件
修改圖片
引入Fresco
縮放
圓角和圓圈
配置Image Pipeline
縮放和旋轉(zhuǎn)圖片
(圖片請(qǐng)求)Image Requests
自定義View
使用ControllerBuilder
在XML中使用Drawees
開始使用 Fresco
關(guān)鍵概念
Image Pipeline介紹
漸進(jìn)式JPEG圖
數(shù)據(jù)源和數(shù)據(jù)訂閱者
直接使用Image Pipeline
動(dòng)畫圖(gif)
使用其他的Image Loader

多圖請(qǐng)求及圖片復(fù)用

本教程內(nèi)容來源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可

多圖請(qǐng)求需 自定義ImageRequest.

先顯示低分辨率的圖,然后是高分辨率的圖

如果你要顯示一張高分辨率的圖,但是這張圖下載比較耗時(shí)。你可以在下載前,先提供一張很快能下載完的小縮略圖。這比一直顯示占位圖,用戶體驗(yàn)會(huì)好很多。

這時(shí),你可以設(shè)置兩個(gè)圖片的URI,一個(gè)是低分辨率的縮略圖,一個(gè)是高分辨率的圖。

Uri lowResUri, highResUri;
PipelineDraweeController controller = Fresco.newControllerBuilder()
    .setLowResImageRequest(ImageRequest.fromUri(lowResUri))
    .setImageRequest(ImageRequest.fromUri(highResUri))
    .setOldController(mSimpleDraweeView.getController())
    .build();
mSimpleDraweeView.setController(controller);

縮略圖預(yù)覽

本功能僅支持本地URI,并且是JPEG圖片格式

如果本地JPEG圖,有EXIF的縮略圖,image pipeline 會(huì)立刻返回一個(gè)縮略圖。完整的清晰大圖,在decode完之后再顯示。

Uri uri;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setLocalThumbnailPreviewsEnabled(true)
    .build();

PipelineDraweeController controller = Fresco.newControllerBuilder()
    .setImageRequest(request)
    .setOldController(mSimpleDraweeView.getController())
    .build();
mSimpleDraweeView.setController(controller);

本地圖片復(fù)用

大部分的時(shí)候,一個(gè)圖片可能會(huì)對(duì)應(yīng)有多個(gè)URI,比如:

  • 拍照上傳。本地圖片較大,上傳的圖片較小。上傳完成之后的圖片,有一個(gè)url,如果要加載這個(gè)url,可直接加載本地圖片。
  • 本地已經(jīng)有600x600尺寸的大圖了,需要顯示100x100的小圖

對(duì)于一個(gè)URI,image pipeline 會(huì)依次檢查內(nèi)存,磁盤,如果沒有從網(wǎng)絡(luò)下載。

而對(duì)于一個(gè)圖片的多個(gè)URI,image pipeline 會(huì)先檢查他們是否在內(nèi)存中。如果沒有任何一個(gè)是在內(nèi)存中的,會(huì)檢查是否在本地存儲(chǔ)中。如果也沒有,才會(huì)執(zhí)行網(wǎng)絡(luò)下載。

但凡有任何一個(gè)檢查發(fā)現(xiàn)在內(nèi)存或者在本地存儲(chǔ)中,都會(huì)進(jìn)行復(fù)用。列表順序就是要顯示的圖片的優(yōu)先順序。

使用時(shí),創(chuàng)建一個(gè)image request 列表,然后傳給ControllerBuilder:

Uri uri1, uri2;
ImageRequest request = ImageRequest.fromUri(uri1);
ImageRequest request2 = ImageRequest.fromUri(uri2);
ImageRequest[] requests = { request1, request2 };

PipelineDraweeController controller = Fresco.newControllerBuilder()
    .setFirstAvailableImageRequests(requests)
    .setOldController(mSimpleDraweeView.getController())
    .build();
mSimpleDraweeView.setController(controller);

自定義 DataSource Supplier

為了更好的靈活性,你可以在創(chuàng)建Drawee controller時(shí)自定義DataSource Supplier。你可以以FirstAvailiableDataSourceSupplier,IncreasingQualityDataSourceSupplier為例自己實(shí)現(xiàn)DataSource Supplier或者以AbstractDraweeControllerBuilder為例將多個(gè)DataSource Supplier根據(jù)需求組合在一起。