在Android中,我定义了一个ImageView的layout_width为fill_parent(它占用了手机的全宽度)。

如果我放入ImageView的图像大于layout_width, Android会缩放?那么高度呢?当Android缩放图像时,它会保持纵横比吗?

我发现在ImageView的顶部和底部有一些空白当Android缩放一个比ImageView大的图像时。这是真的吗?如果是,我如何消除空白?


当前回答

我有一个算法缩放位图,以最适合容器的尺寸,保持其纵横比。请在这里找到我的解决方案

希望这能帮助到路上的人!

其他回答

这招对我很管用:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"

给其他有这种问题的人。你有一个ImageView,你想要它的宽度为fill_parent,高度按比例缩放:

添加这两个属性到你的ImageView:

android:adjustViewBounds="true"
android:scaleType="centerCrop"

并设置ImageView的宽度为fill_parent,高度为wrap_content。

另外,如果你不想让你的图像被裁剪,试试这个:

 android:adjustViewBounds="true"
 android:layout_centerInParent="true"

看一下ImageView。ScaleType来控制和理解在ImageView中发生大小调整的方式。当图像被调整大小时(同时保持其纵横比),图像的高度或宽度可能会小于ImageView的维度。

如果你想让你的图像占据尽可能大的空间,那么最好的选择是

android:layout_weight="1"
android:scaleType="fitCenter"

以编程方式应用宽高比到Imageview:

aspectRatio = imageWidth/imageHeight   
ratioOfWidth = imageWidth/maxWidth  
ratioOfHeight = imageHeight/maxHeight  


if(ratioOfWidth > ratioOfHeight){​​​​​​​
    imageWidth = maxWidth 
    imageHeight = imageWidth/aspectRatio
}​​​​​​​ else if(ratioOfHeight > ratioOfWidth){​​​​​​​
    imageHeight = maxHeight
    imageWidth = imageHeight * aspectRatio
}​​​​​​​

之后,您可以使用缩放位图图像视图

Bitmap scaledBitmap= Bitmap.createScaledBitmap(bitmap, (int) imageWidth , (int) imageHeight , true);