72

我想将图像放大以占据 ImageView 的整个大小。这与使用略有不同,scaleType=fit_center因为如果图像纵横比与 ImageView 的纵横比不完全匹配,fit_center将在图像周围留下条带。相反,我希望图像居中并放大以完全填充封闭的视图,并切掉任何多余的部分。

我可以通过在 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()因为视图尚未布局并且没有大小)

4

5 回答 5

198

您可以使用android:scaleType="centerCrop". 保持纵横比并根据需要缩放图像。

欲了解更多信息,请通过以下链接

http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

于 2011-07-12T19:41:04.327 回答
18

在某些情况下,您只需要

android:adjustViewBounds="true"
于 2019-07-02T14:52:46.637 回答
4

为您的 ImageView 尝试 scaleType 属性。http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

于 2011-07-12T19:39:53.260 回答
4
imageView.setScaleType(ImageView.ScaleType.FIT_XY);

这对我来说可以使图像适合整个图像视图,而且它说“ScaleType.FIT_XY”以适合 imageView 的 X 和 Y 轴是有道理的。

从 xml 文件中,它将是:

android:scaleType="fitXY"
于 2020-09-30T12:22:14.560 回答
1

我很晚了,但希望它对未来有所帮助。这是我如何将图像拉伸到全屏或图像视图而不scaleType="fitXY"会对图像造成损坏的解决方案。使用以下库。

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

要查找设备屏幕的纵横比,请使用以下代码。

DisplayMetrics metrics =this.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
于 2021-11-06T17:48:49.127 回答