codecamp

Fresco 监听下载事件

监听下载事件

本教程内容来源于: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图

Fresco 多图请求及图片复用
Fresco 缩放和旋转
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }