16

我有一个ImageView最大高度和最大宽度都设置为100. 下图显然不是正方形,但你可以发挥你的想象力;)

图1:

╔══════════════════════════════════════════════╗
║ ImageView    ╔══════════════╗                ║
║              ║              ║                ║
║              ║ Actual image ║                ║
║              ║              ║                ║
║              ║              ║                ║
║              ║              ║                ║
║              ╚══════════════╝                ║
╚══════════════════════════════════════════════╝

无论如何,如果我尝试将 a 设置为BitMap没有ImageView1:1 的比例,则图像的位置如图 1 所示。我想要的是将图片放置ImageView在如图所示的左侧2 下面。

图 2:

╔══════════════════════════════════════════════╗
║══════════════╗                               ║
║              ║                               ║
║ Actual image ║                               ║
║              ║                               ║
║              ║                               ║
║              ║                               ║
║══════════════╝                               ║
╚══════════════════════════════════════════════╝

您可以在下面的 XML 中看到我的 ImageView。maxHeight,maxWidthadjustViewBounds在运行时设置。

<ImageView android:id="@+id/someImage"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textName"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:paddingRight="4dp"
    />

RelativeLayout如果它有什么不同的话。

4

7 回答 7

19

尝试这个

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/home_icon" 
     android:scaleType="fitStart"/>

它对我有帮助。

于 2011-10-09T11:06:51.753 回答
7

默认情况下,scaleType 是 "fitCenter" / ScaleType.FIT_CENTER 就像在你的第一个草图中一样。


要将可绘制对象对齐到 ImageView 的左侧,如第二个草图所示:

在 xml 视图中:

<ImageView 
   android:scaleType="fitStart" />

或在 Java 类中:

ImageView image_view = [create new ImageView or getView from xml];
image_view.setScale(ScaleType.FIT_START);


将可绘制对象对齐到ImageView的右侧

在 xml 视图中:

<ImageView 
   android:scaleType="fitEnd" />

或在 Java 类中:

ImageView image_view = [create new ImageView or getView from xml];
image_view.setScale(ScaleType.FIT_END);
于 2012-10-04T18:32:02.307 回答
3

你为什么不给你的视图添加一个drawableLeft。

像这样(在您的 layout.xml 中): android:drawableLeft="@drawable/yourDrawableId" -或- 像这样(在 Java 代码中): yourView.setCompoundDrawablesWithIntrinsicBounds(yourDrawableId,0, 0,0);

您可以在 View 容器内控制此可绘制对象的填充等(以控制细粒度的布局调整)。

于 2011-09-12T15:58:19.523 回答
2

我遇到了同样的问题,这就是我解决它的方法:

我最终将 ImageView 放在与 ImageView 一样大的 RelativeLayout 中,并将相对布局的重力设置为我想要的(在您的情况下为左侧)。

我还将 adjustViewBounds 设置为 true,因此 ImageView 与 Image 一样大,并且位于相对布局内。

不是一个非常优雅的解决方案,但它有效......

于 2011-06-06T09:26:46.117 回答
1

我用:

android:scaleType="fitCenter"

记录在这里。祝你好运!

编辑:我的错,我没有意识到你在 ImageView 中将图像居中(我的第一次阅读我认为你在另一个 View 中居中时遇到了麻烦)。现在我不太确定,但无论如何你都可以看看 ScaleType ^_-

于 2010-05-04T02:58:37.083 回答
1

有什么不对劲。您的 ImageViewwrap_content在其layout_widthlayout_heightXML 中都被定义,因此它应该始终只占用与您的位图相同的空间。

尝试android:background为您的 ImageView 添加一个,看看它确实比您的位图更宽,并导致不需要的居中:

<ImageView android:id="@+id/someImage"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textName"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:paddingRight="4dp"
    android:background="#F00"
    />

使用一些具有透明背景颜色的位图对其进行测试,以便我们可以从 ImageView 中看到红色背景。如果您的源位图很高,我希望它显示一个高矩形,如果位图很宽,它会显示一个宽矩形。如果您的源位图是正方形,您只会看到一个正方形。我们永远不会从您的问题中看到图 1 的情况。

也许您想让您的 ImageView 始终保持 100x100 尺寸?然后您可以使用以下代码(注意其他人已经正确提到fitStart的属性):scaleType

<ImageView android:id="@+id/someImage"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textName"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:paddingRight="4dp"
    android:background="#F00"
    android:scaleType="fitStart"
    />

如果这是您想要的maxHeightmaxWidth则无需从 Java 代码中进行设置。adjustViewBounds

于 2011-11-05T03:09:41.220 回答
1

尝试

android:gravity="left"

重力是视图定位其内容的方式。适用于文本的 TextView,可能适用于图像的 ImageView。

编辑:

尝试制作一个包含 ImageView 的 FrameLayout。将 ImageView 的宽度和高度设置为“wrap_content”,并将父级的重力设置为“左”。

否则,在 View 中实现 onDraw 并在您想要的任何位置绘制图像。

于 2010-05-04T02:40:47.123 回答