ImageView
的layout_width
定义为fill_parent
(占据手机的全部宽度)。如果我放入
ImageView
的图片尺寸比layout_width
大,那么Android会对其进行缩放,对吗?但是高度呢?当Android缩放图片时,它是否保持长宽比?我发现,当Android缩放比
ImageView
更大的图片时,在ImageView
的顶部和底部会出现一些白色空间。这是真的吗?如果是,我该如何消除这些白色空间?ImageView
的layout_width
定义为fill_parent
(占据手机的全部宽度)。ImageView
的图片尺寸比layout_width
大,那么Android会对其进行缩放,对吗?但是高度呢?当Android缩放图片时,它是否保持长宽比?ImageView
更大的图片时,在ImageView
的顶部和底部会出现一些白色空间。这是真的吗?如果是,我该如何消除这些白色空间?默认情况下,Android将缩放您的图像以适应ImageView,并保持其纵横比。但是,请确保使用android:src="..."
将图像设置到ImageView中,而不是android:background="..."
。 src=
会使其按比例缩放图像,但background=
会使其缩放并扭曲图片使其恰好适应ImageView的大小。(您可以同时使用背景和源,这对于诸如在主要图像周围显示框架等内容非常有用,只需要一个ImageView。)
还应该查看android:adjustViewBounds
来使ImageView调整自身大小以适应重新缩放后的图像。例如,如果在正常情况下为方形ImageView中有一个矩形图像,则adjustViewBounds=true将使其调整ImageView也成为矩形。然后这会影响ImageView周围其他视图的布局。
然后,正如Samuh所写的那样,您可以使用android:scaleType
参数更改其默认缩放图像的方式。顺便说一句,发现这是如何工作的最简单方法就是自己进行一些实验!只需记住查看模拟器本身(或实际手机)中的布局,因为Eclipse中的预览通常是错误的。
将其设置为true,如果您希望ImageView调整其边界以保持其可绘制对象的宽高比。
对于其他遇到此问题的人,您有一个希望宽度为fill_parent
且高度按比例缩放的ImageView
:
将以下两个属性添加到您的 ImageView
中:
android:adjustViewBounds="true"
android:scaleType="centerCrop"
将 ImageView
的宽度设置为 fill_parent
,高度设置为 wrap_content
。
另外,如果您不希望图像被裁剪,请尝试以下方法:
android:adjustViewBounds="true"
android:layout_centerInParent="true"
View
)”之外,+1。据我所知,没有其他视图具有adjustViewBounds
或scaleType
属性。 - LarsH如果你想要一个ImageView
,可以在保持正确的宽高比的同时进行缩放,可以在XML中添加以下内容:
android:adjustViewBounds="true"
android:scaleType="fitCenter"
将以下代码添加到你的程序中:
// We need to adjust the height if the width of the bitmap is
// smaller than the view width, otherwise the image will be boxed.
final double viewWidthToBitmapWidthRatio = (double)image.getWidth() / (double)bitmap.getWidth();
image.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);
我花了一些时间才让它工作,但这似乎适用于图像小于屏幕宽度和大于屏幕宽度的情况,并且不会将图像装入一个框中。
这个方法对我有效:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"
这是在 ConstraintLayout 中对我起作用的方式:
<ImageView
android:id="@+id/myImg"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"/>
然后在代码中,我将可绘制对象设置为:
ImageView imgView = findViewById(R.id.myImg);
imgView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.image_to_show, null));
根据其宽高比,此项完美地适配了图像并使其保持居中。
这解决了我的问题。
android:adjustViewBounds="true"
android:scaleType="fitXY"
以下代码可按比例缩放图像:
Bitmap bitmapImage = BitmapFactory.decodeFile("Your path");
int nh = (int) ( bitmapImage.getHeight() * (512.0 / bitmapImage.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bitmapImage, 512, nh, true);
your_imageview.setImageBitmap(scaled);
ImageView
中调整大小发生的方式。当图像被调整大小(同时保持其纵横比)时,很有可能图像的高度或宽度变得小于 ImageView
的尺寸。在ImageView中使用以下属性来保持宽高比:
android:adjustViewBounds="true"
android:scaleType="fitXY"
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
setImageBitmap
与android:src="..."
等效,而setBackground...
则相当于android:background="..."
。 - Steve Haleyimage.setImageDrawable(...)
在Android中设置图片,与xml中的android:src="..."
作用相同。 - PureSpiderandroid:adjustViewBounds
是我问题的最后一块拼图,谢谢! - themarketka