Fresco:在listitems中显示错误的图像

时间:2016-02-25 11:24:04

标签: android facebook performance fresco

我正在使用fersco库来加载本地图像。最初我在每个项目中显示占位符图像。一旦下载图像,我将该图像存储到本地路径,然后通过setImageUri函数加载图像。如果我在下载图像时快速滚动它会显示不同的图像并重新出现一段时间,如果我停止滚动,请继续更改。

我的SimpleDraweeView:

<com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/fake_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
           android:layout_gravity="center|center_horizontal|center_vertical"
            android:adjustViewBounds="true"
            android:contentDescription="@string/app_name"
            android:scaleType="centerInside" /> 

我的适配器代码是:

GenericDraweeHierarchy hierarchy = setHierarchyForDraweeView(mImageView, 300);

hierarchy.setFailureImage(mContext.getResources()getDrawable(R.drawable.broken_image_black)。); mSimpleDraweeView.setImageURI(Uri.fromFile(新文件(mPath / 本地路径 /)));

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.RED));
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我看到一些应该修复的东西,但没有一个能解释错误的加载。我将能够提供帮助,但我需要按照here所述的logcat日志。另外,有一点我不完全理解。从您的描述中,您似乎手动下载图像,将它们保存到磁盘,并在下载时设置Uri。为什么不使用Fresco为您自动下载和磁盘缓存图像?你能否提供这段代码,因为问题很可能就在那里。

应该修复的事情:

    adjustViewBounds不支持
  1. scaleTypeSimpleDraweeView attributtes。 Drawee同时处理多个图像(占位符,失败图像,实际图像等)。每个图像都有自己的比例类型,因此您需要使用Drawee atrributes,如here所述。

  2. 如果要从XML扩充视图,draweeView.getHierarchy永远不应为null。无论如何你都会有一个NullPointerException,因为你没有从if-branch返回层次结构。因此,您也可以通过XML指定失败图像,无需以编程方式执行此操作。如果您始终使用相同的值,则淡入淡出持续时间相同。