如何在 android 中使用 fresco 设置渐进式 jpeg

How to set up progressive jpegs using fresco in android

我刚刚开始使用 fresco,并且已按照其文档中的步骤进行操作。我已经能够将 URI 加载到我的列表视图适配器中的 SimpleDraweeView 中,现在我正在尝试实现渐进式 jpeg(图像在加载时提高质量)。问题是他们在站点中提供的代码没有按预期工作。 Uri 正在加载,但不是渐进式的(图像在加载时质量不会逐渐提高)。有什么我遗漏或忘记添加的吗?

这是我的构建依赖项:

compile 'com.facebook.fresco:fresco:0.13.+'

我已经在我的申请中添加了这个 class:

//For fresco
 Fresco.initialize(this);

这是我的 xml

<com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/tag_iv_tu"
                android:layout_width="@dimen/tu_tag_side"
                android:layout_height="@dimen/tu_tag_height"
                android:layout_centerInParent="true"
                android:layout_gravity="center_horizontal"
                fresco:placeholderImage="@drawable/abc_ic_menu_share_mtrl_alpha" />

这是我的列表视图适配器中 getView() 方法中的代码

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(fileUri)
                            .setProgressiveRenderingEnabled(true)
                            .build();
                    DraweeController controller = Fresco.newDraweeControllerBuilder()
                            .setImageRequest(request)
                            .setOldController(holder.tag_iv_tu.getController())
                            .build();
                    holder.tag_iv_tu.setController(controller);

您必须为 ImageRequst 设置 ResizeOption,因为渐进依赖于 ResizeOptions。

试试这个:

ResizeOptions options = new ResizeOptions(width, height);

ImageRequest request = ImageRequestBuilder
            .newBuilderWithSource(Uri.parse(uri))
            .setProgressiveRenderingEnabled(true).setResizeOptions(options)
            .build();

使用此代码:

        String url ="http://...";
        Uri uri = Uri.parse(url);

        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                .setProgressiveRenderingEnabled(true)
                .build();

        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(image.getController())
                .build();

        mSimpleDraweeView.setController(controller);