【发布时间】:2014-10-16 09:21:41
【问题描述】:
假设我前几天拍摄的这个美丽蘑菇的图像的大小是未知的。它可以是 350x500 像素或 1080x1920 或 1920x1080 或 1x1。任何图像都应该可以在这里使用。
我想要完成的是:我需要将图像一直拉伸到它会尽快与父视图边缘相遇的方向,但不占用其他两个方向的任何区域。
下面是一个示例:我有一个垂直图像,我需要在平板电脑上显示它。在这种情况下,它需要上下拉伸(并保持纵横比),而不是左右拉伸。 左边和右边的黑色区域没有被占用是很重要的。它应该是这样的:
如果它比父视图宽,则需要左右拉伸相同的图像,但不需要上下拉伸:
这是我尝试过的:
将 xml
layout_width和layout_height属性设置为match_parent和wrap_content的不同组合。这不起作用,因为我们无法确定如何在编译时拉伸图像,因为我们没有图像的尺寸,也没有容器的尺寸。尝试像this那样以编程方式拉伸位图,但这只会拉伸宽度,效率有点低。
如果有一种方法可以根据图像比例与父容器比例的比较,以编程方式调整 ImageView 的 LayoutParams,那就太好了。有谁知道这样做的干净方法吗?
【问题讨论】:
-
您尝试过缩放类型 CENTER_INSIDE 吗?见developer.android.com/reference/android/widget/…
-
所以您是说视图的
imageView.setScaleType(ScaleType.CENTER_INSIDE)或ScaleType.CROP是不够的,因为您正试图在此过程中做出一些复杂的决策? -
@Henry
center_inside如果图像太小,则根本不会拉伸图像。如果我使用wrap_content,它将保持图像的原始大小。如果我使用match_parent,它仍然会保持图像的原始大小,即使视图占据了整个父级。 -
@JaySnayder 你的意思是
ScaleType.CENTER_CROP?我不想裁剪它。我想将所有内容保留在内部并保持纵横比相同。我在上面的评论中解释了为什么CENTER_INSIDE不起作用 -
@Oleksiy 对不起,我的意思是
ScaleTYPE.CENTER。根据定义,如果您将match_parent指定为ImageView大小,则应在保持纵横比的同时填充一个方向。但是,也许我仍然误解了这个问题。我以为这就是你的目标。