4

所以我不知道为什么会发生这种情况。我正在使用通用图像加载程序来加载这些图像。看起来像素的最后一行因为一些奇怪的原因而被拉伸。我希望图像能够均匀伸展。 (我不在乎它看起来很奇怪,下面的图片仅供演示使用)ImageView不能正确拉伸图像

另外,不要介意第一张和最后一张图片。我故意模糊了,因为它有人的脸。

Images appear like this 这是我建立了我的通用图像装载机:

//setup Image Loader for loading cruise line logos 
    displayImageOptions = new DisplayImageOptions.Builder() 
    .showImageOnLoading(R.drawable.ic_launcher)//show this image when image is loading 
    .showImageForEmptyUri(R.drawable.ic_launcher)//show this image incase image doesn't exist 
    .showImageOnFail(R.drawable.ic_launcher)//show this image if fetching image from URL didn't work 
    .cacheInMemory(true)//cache image in RAM 
    .cacheOnDisc(true)//cache image in device for later use 
    .considerExifParams(true) 
    .displayer(new RoundedBitmapDisplayer(5))//super subtle rounded corners on images 
    .build(); 
+0

对于imageview,您已将高度固定为120dip,并将scaletype用作fitXY,这可能会导致此问题。 – Sushil

+0

我尝试了centerCrop并一起删除它。两者都不起作用。另外,我需要使用fitXY来使它变得柔软。 – Sree

回答

5

这是由方式RoundedBitmapDisplayer造成绘制位图。

如果你看源代码,你会发现它使用了一个RoundedDrawable,它使用canvas.drawRoundRect()来绘制一个所需大小的Drawable的圆角矩形,使用下载的图像作为纹理通过BitmapShader。 BitmapShader不支持缩放(仅限夹紧和平铺模式)。尝试使用SimpleBitmapDisplayer,而不是使用正常ImageView.setImageBitmap()显示图像的方式。

如果你需要圆角,你必须找到一个不同的方法来实现它,例如通过首先将位图缩放到所需的大小。另一个选项是在调用BitmapDrawable进行缩放之前调用Canvas.saveLayer(),然后使用PorterDuff.Mode.DST_IN应用圆角掩蔽效果。无论哪种方式,您最终都会编写更低级的代码,但您应该能够将所有内容都封装在自定义的BitmapDisplayer中。

+0

感谢您的回复。明天会测试一下,并告诉你它是否有效。 – Sree

+0

你说得对,那就是问题所在。谢谢您的帮助! – Sree

+0

你可以在这里发布你的工作,我面临同样的问题。 – Dimitri