Fresco图像宽高均为match_parent时不显示。

3
我是一个有用的助手,可以翻译文本。
我有一个应用程序,使用Fresco库加载图像。我有两个问题。 1. 如果我像这样使用Fresco图像

<com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/feedImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

它不会显示任何东西,只会在图像应该出现的地方显示一条薄线颜色。
但是如果我做这样的事情:
<com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/feedImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        fresco:viewAspectRatio="1.33"
        android:scaleType="fitXY"
        />

一切都正常工作(但我看不到完整的图像)。
我想要实现与 Facebook 相同的视图(图像全宽和高)。
我在回收器中加载了图像列表。图像已加载到缓存中(我已经验证了),但如果我滚动到底部,然后再回到顶部,我会看到图像正在加载(Facebook 没有这个问题,并且他们使用相同的库)。如果我滚动得非常缓慢,就没有问题。我最近从 Volley 更改了库,以前没有这个问题(所以这不是回收器的问题)。我该怎么解决?
编辑:我还注意到另一件事,即如果我禁用磁盘缓存并杀死应用程序,则缓存不会被删除,如文档所说。我知道如果我调用 ImagePipeline imagePipeline = Fresco.getImagePipeline(); Uri uri; imagePipeline.evictFromMemoryCache(uri); ,缓存将被删除,但这不应该自动完成吗?

我不太理解你所说的“图片全宽高”的含义,但你可以尝试使用android:adjustViewBounds="true" - natario
我是说就像你在Facebook上看到的那样。我会尝试一下。 - Bogdan Daniel
1
嘿,我也遇到了同样的问题...你找到解决方案了吗?请帮帮我。 - piyush poriya
1个回答

0
对于问题#2,我不确定我是否正确理解了问题,它根本不是问题。图像很可能在内存缓存中,但是在可以在屏幕上显示之前,仍需要解码缓存中存储的图像,这可能就是您所说的加载问题。您只在快速滚动时看到这种情况,因为您使用的RecyclerAdapter正在追赶滚动位置。(这是一种有教养的猜测,绝不能认为这是正确的)。当您慢慢移动并且看不到图像加载时,是因为Adapter开始在屏幕上显示之前加载下一个ViewHolder,但在那个点之前没有太多时间。因此,当您快速滚动时,我认为这只是Adapter通过其OnBindViewHolder调用进行追赶,而不是缓慢移动,它不需要追赶,并且在您到达recyclerview中的下一个项目之前已经加载了图像。
与内存缓存不同,当应用程序处于后台时,磁盘缓存不会被清除,因此如果需要,您需要将其删除。
我不确定问题#1,但我会尝试找出可能的原因。也许尝试将比例类型设置为CropCenter或其他内容,看看是否可以消除这些线条。

显然,第一个问题与我使用未定义尺寸的RecyclerView有关,因此图像无法与父元素匹配(或类似https://github.com/facebook/fresco/issues/753的情况)。我不是在谈论磁盘缓存,我没有设置那个。我试着在Facebook上快速滚动,但加载并没有发生,正如我所说当我使用volley库时这种情况并没有发生。 - Bogdan Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接