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

漸進(jìn)式JPEG圖

本教程內(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è)事情:

  1. 返回下一個(gè)需要解碼的掃描次數(shù)
  2. 確定多少個(gè)掃描次數(shù)之后的圖片才能開(kāi)始顯示。

下面的實(shí)例中,為了實(shí)現(xiàn)節(jié)省CPU,并不是每個(gè)掃描都進(jìn)行解碼。

注意:

  • 每次解碼完之后,調(diào)用getNextScanNumberToDecode, 等待掃描值大于返回值,才有可能進(jìn)行解碼。

假設(shè),隨著下載的進(jìn)行,下載完的掃描序列如下: 1, 4, 5, 10。那么:

  1. 首次調(diào)用getNextScanNumberToDecode返回為2, 因?yàn)槌跏紩r(shí),解碼的掃描數(shù)為0。
  2. 那么1將不會(huì)解碼,下載完成4個(gè)掃描時(shí),解碼一次。下個(gè)解碼為掃描數(shù)為6
  3. 5不會(huì)解碼,10才會(huì)解碼
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.

At Request Time

目前,我們必須顯式地在加載時(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)式圖片加載。