什么会导致Android ImageView部分解码?

时间:2015-02-08 01:09:44

标签: android imageview picasso

我正在尝试追踪一个我只能解释的错误,就像我的ImageView中的图像没有完全解码一样 - 我看到了我的图像的顶部,但其余的图像绘制为纯白。我附加了一个调试器,但没有看到任何错误消息输出,例如内存限制。以下是我的活动的部分截图:

problem

我将一系列ImageView叠加在一起,就像一堆卡片。这是截图的注释,所以你可以看出为什么这是错误的:

annotation

如果我旋转我的设备(具有重新运行onCreate的效果),则ImageView会正确绘制。我正在使用Square's picasso库来管理下载和解码。我检查了文件系统中代表图像的文件本身,文件很好并完全下载。

我似乎能够每10次左右重复一次这种行为,这对我的用户来说就足够了。

有谁能说明为什么会这样?我重新编辑的设备是运行Android L的Nexus 5,但我也在三星Galaxy 4上运行Android KitKat的同事设备上看到了这个。

为了记录,我正在运行picasso 2.4.0(2015年1月20日毕加索的一个分支)。

2 个答案:

答案 0 :(得分:1)

经过进一步审核,这是germane comment from this thread

  

我修复了NetworkRequestHandler.java中的以下代码...当网络被破坏时,我认为它会解码半张照片

在我的测试服务器上,我返回了JPEG图像的一个子集而不是整个JPEG图像时,我能够100%重现此问题。似乎只有返回数据子集的HTTP连接(或坏文件服务器)才会触发此问题。我使用自定义网络库插入Picasso(而不是okhttp),我只是修改了该库,以确保文件长度与服务器报告的内容长度相匹配,然后再存储和解码文件。

答案 1 :(得分:0)

毕加索的这篇文章描述了我所经历的:

I get half photo and half white color, and sometimes I get only the white color. #836

线程上的一位评论者说:

  

删除android:scaleType属性并检查错误是否仍然存在...当从自定义ImageView中删除scaleType属性并在picasso中使用fit()方法时,我通常不会收到该错误。

事实证明,我实际上是在我加载的imageView中包含“centerCrop”的“scaleType”属性。我删除了此属性以支持.fit().centerCrop(),并且之后没有看到此问题;如果我这样做会更新这个帖子。