本教程內(nèi)容來源于:http://fresco-cn.org
采用 知識共享 署名 4.0 國際 許可協(xié)議 進行許可
多圖請求需 自定義ImageRequest.
如果你要顯示一張高分辨率的圖,但是這張圖下載比較耗時。你可以在下載前,先提供一張很快能下載完的小縮略圖。這比一直顯示占位圖,用戶體驗會好很多。
這時,你可以設置兩個圖片的URI,一個是低分辨率的縮略圖,一個是高分辨率的圖。
Uri lowResUri, highResUri;
PipelineDraweeController controller = Fresco.newControllerBuilder()
.setLowResImageRequest(ImageRequest.fromUri(lowResUri))
.setImageRequest(ImageRequest.fromUri(highResUri))
.setOldController(mSimpleDraweeView.getController())
.build();
mSimpleDraweeView.setController(controller);
本功能僅支持本地URI,并且是JPEG圖片格式
如果本地JPEG圖,有EXIF的縮略圖,image pipeline 會立刻返回一個縮略圖。完整的清晰大圖,在decode完之后再顯示。
Uri uri;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setLocalThumbnailPreviewsEnabled(true)
.build();
PipelineDraweeController controller = Fresco.newControllerBuilder()
.setImageRequest(request)
.setOldController(mSimpleDraweeView.getController())
.build();
mSimpleDraweeView.setController(controller);
大部分的時候,一個圖片可能會對應有多個URI,比如:
對于一個URI,image pipeline 會依次檢查內(nèi)存,磁盤,如果沒有從網(wǎng)絡下載。
而對于一個圖片的多個URI,image pipeline 會先檢查他們是否在內(nèi)存中。如果沒有任何一個是在內(nèi)存中的,會檢查是否在本地存儲中。如果也沒有,才會執(zhí)行網(wǎng)絡下載。
但凡有任何一個檢查發(fā)現(xiàn)在內(nèi)存或者在本地存儲中,都會進行復用。列表順序就是要顯示的圖片的優(yōu)先順序。
使用時,創(chuàng)建一個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);
為了更好的靈活性,你可以在創(chuàng)建Drawee controller時自定義DataSource Supplier。你可以以FirstAvailiableDataSourceSupplier,IncreasingQualityDataSourceSupplier為例自己實現(xiàn)DataSource Supplier或者以AbstractDraweeControllerBuilder為例將多個DataSource Supplier根據(jù)需求組合在一起。