廖祜秋 · 更新于 2018-11-28 11:00:42

监听下载事件

本教程内容来源于:http://fresco-cn.org
采用 知识共享 署名 4.0 国际 许可协议 进行许可

你也许想在图片下载完成或者下载失败之后,做一些其他事情。

图片是后台线程异步加载的,我们可以使用一个ControllerListener实现事件的监听。

_在监听事件回调时,无法修改图片,如果需要修改图片,可使用 后处理器(Postprocessor)

    ControllerListener controllerListener = new BaseControllerListener() {
        @Override
        public void onFinalImageSet(
            String id,
            @Nullable ImageInfo imageInfo,
            @Nullable Animatable anim) {
          if (imageInfo == null) {
            return;
          }
          QualityInfo qualityInfo = imageInfo.getQualityInfo();
          FLog.d("Final image received! " +
              "Size %d x %d",
              "Quality level %d, good enough: %s, full quality: %s",
              imageInfo.getWidth(),
              imageInfo.getHeight(),
              qualityInfo.getQuality(),
              qualityInfo.isOfGoodEnoughQuality(),
              qualityInfo.isOfFullQuality());
        }

        @Override
        public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
          FLog.d("Intermediate image received");
        }

        @Override
        public void onFailure(String id, Throwable throwable) {
          FLog.e(getClass(), throwable, "Error loading %s", id)
        }
    };

    Uri uri;
    DraweeController controller = Fresco.newControllerBuilder()
        .setControllerListener(controllerListener)
        .setUri(uri);
        // other setters
        .build();
    mSimpleDraweeView.setController(controller);

对所有的图片加载,onFinalImageSet 或者 onFailure 都会被触发。前者在成功时,后者在失败时。

如果允许呈现渐进式JPEG,同时图片也是渐进式图片,onIntermediateImageSet会在每个扫描被解码后回调。具体图片的那个扫描会被解码,参见渐进式JPEG图