Android:如何拉伸ImageView中的图像以适应屏幕大小

132

我有一个ImageView,它的高度和宽度都设置为fill_parent,并且有一个相同值的LinearLayout。因此,我认为这应该使我的图像适合屏幕大小。但是实际上只适合了80%(在横向模式下有顶部和底部边距)。

我尝试了以下代码但没有成功:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);

imgView.setMaxWidth(width);
imgView.setMaxHeight(height);

还有其他的想法吗?


虽然这是一个稍微不同的问题,但是这个答案应该会对你有所帮助。 - fredley
10个回答

332

要通过编程方式进行更改,请使用:

imgview.setScaleType(ScaleType.FIT_XY);

OR

要从 XML 转换,请使用:

 android:scaleType="fitXY"

27
我知道这正是你想要的,但对于那些你关心宽高比的图片而言,这将会拉伸它。 - Artem Russakovskii
12
可以在布局的XML文件中定义相同的内容,使用android:scaleType="fitXY"。 - Sathesh
13
为了让图片填满整个区域并保持良好的长宽比,请使用 v.setAdjustViewBounds(true); v.setScaleType(ImageView.ScaleType.CENTER_CROP); - Marco Florian
1
@MarcoFlorian 为什么不直接使用FIT_CENTER呢?有什么原因吗? - Jenix
1
运行得非常顺畅。 - dave o grady
显示剩余7条评论

119

在您的布局xml文件中加入 android:scaleType="fitXY" 属性
P.S.:这适用于当图像使用 android:src="..." 设置时,而不是使用 android:background="..."。 因为背景默认会拉伸和适应视图。


背景的东西对我没有帮助解决问题,我做错了什么吗? 请看: https://dev59.com/GGzXa4cB1Zd3GeqPX9LV - Dheeraj Bhaskar
1
如果您硬编码图像的宽度并希望高度按比例缩放,则此方法不会考虑纵横比。 - Akshat Agarwal
我该如何让它适应整个屏幕呢?我希望它仍然保持比例。 - Ruchir Baronia
+1 表示它适用于 android:src="..." 而不是 android:background="...",这非常重要。 - DragonFire

22
请使用以下内容:
ImageView.setAdjustViewBounds(true);

4
这与 android:scaleType="fitXY" 结合使用才有效。谢谢。 - smac89
@smac89 这些组合与仅使用FIT_CENTER有何区别?不应该使用FIT_CENTER吗? - Jenix
@Jenix,提醒你一下,我已经有一段时间没有接触安卓了,但我认为使用“fitXY”的原因是使图像按比例拉伸以适应其设置的框架/视图。使用“FIT_CENTER”听起来只会将图像放置在视图的中心,但不会填充视图。我可能错了,但你可以尝试使用任何一种方法来找出哪种方法更有效。 - smac89
在问之前,我已经测试了它们两个,结果一样。我只是好奇原因,但现在我认为你不知道FIT_CENTER,就像我不知道你告诉我的那个组合一样。 :) - Jenix

9
如果您使用 android:scaleType="fitXY",则必须指定 android:layout_width="75dp"android:layout_height="75dp"。如果使用 wrap_content,则不会拉伸到所需的大小。
<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/listItemNoteImage"
android:src="@drawable/MyImage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="12dp"
android:scaleType="fitXY"/>

7

接受的答案是完美的,但是如果您想从xml中进行操作,可以使用android:scaleType="fitXY"


2
我已经在Xml文件中使用了android:scaleType="fitXY"代码。

0
也许这与主题无关。 这是我在Android Studio上的操作方法。
将以下代码放入XML中:
android:adjustViewBounds="true"

android:scaleType="centerCrop"

adjustViewBounds = 根据比例调整图像大小以适应视图

scaleType = 裁剪所有白色空白区域

然后,设置

layout_width = match_parent 
layout_height = warp_content

将变成这样


0

只需将您的ImageView高度和宽度更改为wrap_content并使用即可

exampleImage.setScaleType(ImageView.ScaleType.FIT_XY);

在你的代码中。


0

针对Android的XML

android:src="@drawable/foto1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"

-11

尝试使用:

imageview.setFitToScreen(true);
imageview.setScaleType(ScaleType.FIT_CENTER);

这将根据正确的比例将您的ImageView适配到屏幕上。


13
"imageview.setFitToScreen(true);" 是什么?是一种未记录的方法吗? 这行代码意思是将 ImageView 对象中的图像自适应屏幕大小显示。它不是未记录的方法,而是 JavaFX 库中所提供的一种属性设置方式。 - Malachiasz
我正在使用Eclipse,但是这段代码无法编译:imageview.setFitToScreen(true) - learner
6
安卓系统中没有这样的方法。 - NightFury
也许他指的是 setFitsSystemWindows() 函数? - ban-geoengineering

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