本教程內(nèi)容來(lái)源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可
注意: 本頁(yè)提及的API僅是初步設(shè)計(jì),后續(xù)可能變動(dòng)
Fresco 支持漸進(jìn)式的網(wǎng)絡(luò)JPEG圖。在開(kāi)始加載之后,圖會(huì)從模糊到清晰漸漸呈現(xiàn)。
你可以設(shè)置一個(gè)清晰度標(biāo)準(zhǔn),在未達(dá)到這個(gè)清晰度之前,會(huì)一直顯示占位圖。
漸進(jìn)式JPEG圖僅僅支持網(wǎng)絡(luò)圖。
配置Image pipeline時(shí) 需要傳遞一個(gè) ProgressiveJpegConfig. 的實(shí)例。
這個(gè)實(shí)例需要完成兩個(gè)事情:
下面的實(shí)例中,為了實(shí)現(xiàn)節(jié)省CPU,并不是每個(gè)掃描都進(jìn)行解碼。
注意:
getNextScanNumberToDecode
, 等待掃描值大于返回值,才有可能進(jìn)行解碼。假設(shè),隨著下載的進(jìn)行,下載完的掃描序列如下: 1, 4, 5, 10
。那么:
getNextScanNumberToDecode
返回為2, 因?yàn)槌跏紩r(shí),解碼的掃描數(shù)為0。ProgressiveJpegConfig pjpegConfig = new ProgressiveJpegConfig() {
@Override
public int getNextScanNumberToDecode(int scanNumber) {
return scanNumber + 2;
}
public QualityInfo getQualityInfo(int scanNumber) {
boolean isGoodEnough = (scanNumber >= 5);
return ImmutableQualityInfo.of(scanNumber, isGoodEnough, false);
}
}
ImagePipelineConfig config = ImagePipelineConfig.newBuilder()
.setProgressiveJpegConfig(pjpeg)
.build();
除了自己實(shí)現(xiàn)ProgressiveJpegConfig, 也可以直接使用SimpleProgressiveJpegConfig.
目前,我們必須顯式地在加載時(shí),允許漸進(jìn)式JPEG圖片加載。
Uri uri;
ImageRequest request = ImageRequestBuilder
.newBuilderWithSource(uri)
.setProgressiveRenderingEnabled(true)
.build();
PipelineDraweeController controller = Fresco.newControllerBuilder()
.setImageRequest(requests)
.setOldController(mSimpleDraweeView.getController())
.build();
mSimpleDraweeView.setController(controller);
我們希望在后續(xù)的版本中,在setImageURI
方法中可以直接支持漸進(jìn)式圖片加載。