缩放图像以填充Android中的整个ImageView

时间:2011-07-12 19:15:22

标签: android android-layout android-imageview

我想缩放图像以占据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 个答案:

答案 0 :(得分:142)

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

有关详情,请浏览以下链接

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

答案 1 :(得分:4)

答案 2 :(得分:0)

在某些情况下,您所需要的只是

android:adjustViewBounds="true"

答案 3 :(得分:0)

imageView.setScaleType(ImageView.ScaleType.FIT_XY);

这对我来说很适合使图像适合整个图像视图,而且说“ ScaleType.FIT_XY”适合图像视图的X和Y轴也很有意义。

在xml文件中,它将是:

android:scaleType="fitXY"