ImageView无法正确拉伸图像

4
所以我不知道为什么会这样。我正在使用Universal Image Loader来加载这些图像。似乎最后一行像素由于某种奇怪的原因被拉伸了。我希望图像只是均匀地拉伸。(我不在意它看起来很奇怪。下面的图片只是为了演示目的。)
此外,请不要在意第一张和最后一张图片。我故意模糊了那张图片,因为上面有一个人的脸。
这是我设置 Universal Image Loader 的方式: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();

对于 ImageView,您已将其高度固定为 120dip,并使用 fitXY 的缩放类型,这可能导致了问题。 - Sushil
我尝试过使用centerCrop和将其全部删除,但都不起作用。此外,我需要使用fitXY来进行拉伸。 - Sree
1个回答

5
这是由RoundedBitmapDisplayer绘制位图的方式引起的。
如果您查看源代码,就会发现它使用了一个RoundedDrawable,该Drawable使用canvas.drawRoundRect()绘制所需大小的圆角矩形,并通过BitmapShader将下载的图像作为纹理。 BitmapShader不支持缩放(仅支持夹紧和平铺模式)。尝试使用SimpleBitmapDisplayer替代,它使用正常的ImageView.setImageBitmap()方法显示图像。
如果您需要圆角,请先将位图缩放到所需大小。另一种选择是在委托给BitmapDrawable进行缩放之前调用Canvas.saveLayer(),然后使用PorterDuff.Mode.DST_IN应用圆角遮罩效果。无论哪种方式,您最终都需要编写更多的低级代码,但您应该能够将所有内容封装在自定义的BitmapDisplayer中。

感谢回复。明天我会测试一下并告诉您是否有效。 - Sree
@Dimitri 我已经解决了这个错误,但是没有使用圆形位图显示器解决了这个问题。我刚刚在GitHub上发布了这个错误,也许它会在那里得到解决。 - Sree

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