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

emm*_*mby 61 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);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但似乎必须有一个更容易的.有没有人知道在ImageView中放大图像同时保留图像的纵横比并完全填充ImageView的方法?

(注意:在我的情况下,我的ImageView占据了整个屏幕,所以我getWindowManager().getDisplay()用来找到所需的图像大小.你不能使用splashView.getWidth()/ getHeight()因为视图还没有布局而且没有大小)

rop*_*ebo 157

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

有关更多信息,请通过以下链接

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

  • 我刚刚在上面的评论中解决了这个问题:android:adjustViewBounds ="true". (12认同)
  • 这不是保持纵横比!我有layout_height = wrap_content,layout_width = fill_parent,宽高比消失了,图像有屏幕的宽度,但是高度错误(它太短了,就像它应该有的高度的40%). (4认同)

小智 17

在某些情况下,您只需要

android:adjustViewBounds="true"
Run Code Online (Sandbox Code Playgroud)


小智 5

imageView.setScaleType(ImageView.ScaleType.FIT_XY);
Run Code Online (Sandbox Code Playgroud)

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

从 xml 文件来看,它将是:

android:scaleType="fitXY"
Run Code Online (Sandbox Code Playgroud)