ImageView第一维度适应自由空间,第二维度保持宽高比评估。

14

我需要类似于<img width="100%" />的东西,用于Android <ImageView>。我的意思是将宽度调整为所有可用空间(缩小或放大图像的宽度),并自动更改高度以保持宽高比。

类似于 <ImageView android:layout_width="match_parent" android:layout_height="auto">

使用android:scaleType="fitCenter"可以对图像进行我想要的操作,但仅限于图像,无法更改视图本身的高度。如果我将两个尺寸都设置为match_parent,只有在屏幕上只有一个图像时才能得到我想要的结果。但我需要一些在图片下方显示的文本。

这是创建ImageView子项的唯一方法吗? 例如android:adjustViewBounds="true"对我没有任何作用。

1个回答

18

我发现了问题所在。ImageView的默认实现无法放大图像。如果图像大于屏幕宽度,则android:adjustViewBounds="true"可以正确地调整高度以保留图像的纵横比。但是,如果图像小于屏幕宽度,则不会对其进行放大。

这是由以下代码引起的

if (newHeight <= heightSize) {
    heightSize = newHeight;
} 

在ImageView类中(第10个API的第688行),我创建了一个特殊的ImageView子类,它允许放大图像以适应宽度。

这里是代码:https://gist.github.com/tprochazka/5486822


我正在使用您的代码,在ListView中,使用通用图像加载器,并且我注意到,对于大图片,它会导致UI卡顿很多。有什么办法可以使其更有效率吗? - Tamas
我的修改是为了使小图像适应更大的ImageView区域,例如如果用户在平板电脑或具有更高屏幕密度的新设备上运行应用程序。如果您想在ListView中使用大图像,则应将其缩小以完全适合ImageView大小,并将此大小缓存到LRU磁盘缓存中。 - ATom

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