将图像定位在ImageView中,并设置最大高度和最大宽度

时间:2010-05-04 01:24:00

标签: android imageview

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

图1:

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

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

图2:

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

您可以在下面看到我的ImageView XML。 <{1}},maxHeightmaxWidth在运行时设置。

adjustViewBounds

如果它有任何区别,则为<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" />

7 个答案:

答案 0 :(得分:19)

试试这个

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

这对我有帮助。

答案 1 :(得分:5)

默认情况下,scaleType是第一个草图中的“fitCenter”/ ScaleType.FIT_CENTER。


将drawable与ImageView的 left 对齐,如第二个草图所示:

xml视图中的

<ImageView 
   android:scaleType="fitStart" />

或在Java类中:

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

<小时/> 将drawable与ImageView的 right 对齐

xml视图中的

<ImageView 
   android:scaleType="fitEnd" />

或在Java类中:

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

答案 2 :(得分:3)

为什么不直接在View中添加d​​rawableLeft。

像这样(在你的layout.xml中):android:drawableLeft =“@ drawable / yourDrawableId” -要么- 像这样(在Java代码中):yourView.setCompoundDrawablesWithIntrinsicBounds(yourDrawableId,0,0,0);

您可以在View容器中控制此drawable的填充等(以控制接近粒度的布局调整)。

答案 3 :(得分:2)

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

我最终将ImageView放在一个与ImageView一样大的RelativeLayout中,并将Relative Layout的重力设置为我想要的(在你的情况下为左)。

我还将adjustViewBounds设置为true,这样ImageView就像Image一样大,并且位于Relative Layout中。

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

答案 4 :(得分:1)

尝试

android:gravity="left"

重力是视图定位其内容的方式。适用于TextView的文本和ImageView for image。

编辑:

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

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

答案 5 :(得分:1)

我用:

android:scaleType="fitCenter"

记录here。祝你好运!

编辑:我的不好,我没有意识到你将图像置于ImageView的中心(我的第一次阅读,我认为你在另一个视图中将ImageView集中在一起)。现在我不太确定,但你可以看看ScaleType ^ _-

答案 6 :(得分:1)

有些事情是对的。对于XML中的wrap_contentlayout_width,您的ImageView定义为layout_height,因此它应始终只占用与位图相同的空间。

尝试为ImageView添加android:background以确定它确实比位图更宽并导致不必要的居中:

<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"
    />

如果这是您想要的,则无需从Java代码中设置maxHeightmaxWidthadjustViewBounds