Android ImageView 大小不能与源图像一起缩放

我在线性布局中有一些图像视图。我需要缩小图像视图,以便他们保持他们的长宽比,同时适合内线性布局垂直。水平方向上,我只需要它们彼此相邻。

我已经为此做了一个简化的测试平台,其中嵌套加权布局,使我有一个宽,但不是很高,线性布局的图像视图-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
<LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
<ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>

(在 Eclipse 布局编辑器中,图像是垂直裁剪的,根本没有缩放——但这只是我们学会喜欢的特质之一)

当运行在硬件上的图像被缩放到正确的高度,同时保持他们的长宽比。我的问题是它们并不挨着。每个 ImageView 的高度与 LinearLayout 的高度正确匹配。每个 ImageView 的宽度是未缩放图像的宽度-实际缩放图像出现在其 ImageView 的左侧。正因为如此,我得到的图像之间有很大的差距。

理想情况下,我希望通过 XML 来管理它,但是,如果这不可能,我理解使用自定义视图可能是最好的解决方案。

我尝试创建一个 IconView (扩展 ImageView)类,它覆盖 onScale,这样我就可以通过根据高度缩放宽度来创建必要大小的图像视图。但是传递到函数中的 ParentWidth 和 ParentHeight 是屏幕的尺寸,而不是 LinearLayout 容器的尺寸。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// Calculations followed by calls to setMeasuredDimension, setLayoutParams
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

所以我的问题是

1)我可以以某种方式修改 XML,使它满足我的需要吗?

2)如何让我的自定义类获得 LinearLayout 的高度,以便我可以计算自定义图像的必要宽度?

谢谢你能读到这里。如果你能为我指明解决方案的方向,我将更加感谢你!

82337 次浏览

如何改变您的图像视图使用 android:layout_height="fill_parent"

编辑 -花了我一段时间才找到,但查看源码帮助我精确定位 调整视图界限。您可能需要尝试将 android:adjustViewBounds="true"添加到 ImageView 中。令人惊讶的是,这个默认值为 false。

奇怪的是 android:layout_height="fill_parent"android:adjustViewBounds="true"没有帮助。我遇到的问题是图像被显示了,但是图像的顶部是块状行,底部是黑色行。为 "centerCrop"设置刻度类型对我有帮助。我想,原因是我的图像尺寸很小。

我也遇到过类似的问题,我的解决方案是在 XML 布局文件中设置 ImageView 的 android:scaleType="fitEnd"属性。

是的,我的解决办法是:

android:scaleType="fitXY"