在Android中将图像放大以填满整个ImageView

79

我想将一张图片缩放到整个ImageView的大小。这与使用scaleType=fit_center略有不同,因为fit_center会在图像的宽高比与ImageView的宽高比不完全匹配时留下黑边。相反,我希望图像被居中并按比例放大以完全填充包围视图,并且任何超出范围的部分都被裁剪掉。

我能够通过在onCreate()期间计算自定义图像矩阵来实现此目的:

final Display display = getWindowManager().getDefaultDisplay();
final float screenWidth = display.getWidth();
final float screenHeight = display.getHeight();
final float imageWidth = splashView.getDrawable().getIntrinsicWidth();
final float imageHeight = splashView.getDrawable().getIntrinsicHeight();
final Matrix splashMatrix = new Matrix();
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth);
splashMatrix.postScale( scale, scale );
splashView.setImageMatrix(splashMatrix);

这个方法可以正常工作,但似乎还有更简单的方法。有没有人知道如何在保持图像纵横比和完全填充ImageView的同时放大ImageView中的图像?

(注意:在我的情况下,我的ImageView占据了整个屏幕,所以我使用getWindowManager().getDisplay()来查找所需的图像大小。你无法使用splashView.getWidth()/getHeight(),因为视图尚未被布局并且没有大小)

6个回答

213

4
它没有保持纵横比!我的布局高度为wrap_content,宽度为fill_parent,纵横比消失了,图像的宽度与屏幕相同,但高度错误(太短了,只有应有高度的40%)。 - Jose Manuel Abarca Rodríguez
18
我刚刚在我的上面评论中修复了问题:android:adjustViewBounds="true"。 - Jose Manuel Abarca Rodríguez
1
这会稍微裁剪一下图片。 - Hammad Nasir
它裁剪了边界! - Arnold Brown
那就是问题所在,“将任何多余的部分切掉”。 - Maciej Beimcik

20
在某些情况下,你所需要的只是:
android:adjustViewBounds="true"

5
imageView.setScaleType(ImageView.ScaleType.FIT_XY);

这对我很有用,可以将图像适应整个图像视图,并且“ScaleType.FIT_XY”表示适应imageView的X轴和Y轴,这是有意义的。
从xml文件中,它应该是:
android:scaleType="fitXY"

4

1
我很晚才来,但希望能在未来有所帮助。以下是我的解决方案,可以将图像拉伸到全屏或图像视图而不使用scaleType="fitXY",因为它会损坏图像。请使用以下库:

[一个简单的图像视图,它根据给定比例缩放宽度或高度方面]https://github.com/santalu/aspect-ratio-imageview

要查找设备屏幕的纵横比,请使用以下代码。
DisplayMetrics metrics =this.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);

1

你必须设置android:scaleType="centerCrop"来填满整个屏幕,但你注意到scaletype属性与android:layout_widthandroid:layout_height属性一起使用。你必须将它们设置为match_parent


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