【问题标题】:Fresco : Listview showing wrong image when fast scrollingFresco:快速滚动时列表视图显示错误的图像
【发布时间】:2016-03-03 10:51:09
【问题描述】:

我有自定义列表视图。在列表视图中包含 200 个项目。当我从上到下或从下到上快速滚动时,列表视图显示错误的图像。如果我滚动缓慢,那么它的工作正常。

XML 中的 SimpleDraweeView:

<com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/fake_image_list_group"
            android:layout_width="match_parent"
            android:layout_height="@dimen/note_list_item_height"
            android:background="@android:color/transparent"
            android:contentDescription="@string/app_name" />

将图像 URI 设置为 SimpleDraweeView :

GenericDraweeHierarchy hierarchy = setHierarchyForDraweeView(mImageView, 300);
   hierarchy.setPlaceholderImage(new AsyncColorDrawable(context.getResources()));
   hierarchy.setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black));
   ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(mPath/*local path*/)))
           .setResizeOptions(new ResizeOptions(width, height))
           .setLocalThumbnailPreviewsEnabled(true)
           .build();
   DraweeController draweeController = Fresco.newDraweeControllerBuilder()
           .setImageRequest(imageRequest)
           .setOldController(mImageView.getController())
           .setAutoPlayAnimations(false)
           .build();
   mImageView.setController(draweeController);

SetHierarchyForDraweeView 函数:

private GenericDraweeHierarchy setHierarchyForDraweeView(SimpleDraweeView draweeView, int duration) {
    if (draweeView != null) {
        if (draweeView.getHierarchy() == null) {
            GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(mContext.getResources());
            GenericDraweeHierarchy hierarchy = builder
                    .setFadeDuration(duration)
                    .setPlaceholderImage(new AsyncColorDrawable(mContext.getResources()))
                    .setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black))
                    .build();
            draweeView.setHierarchy(hierarchy);
        } else {
            GenericDraweeHierarchy hierarchy = draweeView.getHierarchy();
            hierarchy.setFadeDuration(duration);
            return hierarchy;
        }
    }
    return null;
}

AsyncColorDrawable 类:

private class AsyncColorDrawable extends ColorDrawable {
    public AsyncColorDrawable(Resources res) {
        super(res.getColor(R.color.application_container_background_color));
    }
}

如果我做错了什么,请弄清楚。感谢您的提前。

【问题讨论】:

    标签: android performance listview fresco


    【解决方案1】:

    为此,您需要使用通用图像加载器。它是一个智能且强大的库,有助于在 Android 上加载、缓存和显示图像。看看this

    【讨论】:

    • 现在我正在使用 fresco 库。如果我使用其他库,它的工作正常。为什么它会出现在这个库中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2016-11-04
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多