我有一个ImageView
,其最大高度和最大宽度都设置为100
。下图显然不是正方形,但你可以用你的想象力;)
图1:
╔══════════════════════════════════════════════╗
║ ImageView ╔══════════════╗ ║
║ ║ ║ ║
║ ║ Actual image ║ ║
║ ║ ║ ║
║ ║ ║ ║
║ ║ ║ ║
║ ╚══════════════╝ ║
╚══════════════════════════════════════════════╝
无论如何,如果我尝试将BitMap
设置为没有比例为1:1的ImageView
,则图像的位置如图1所示。我想要的是图片放在ImageView
内左侧,如下图2所示。
图2:
╔══════════════════════════════════════════════╗
║══════════════╗ ║
║ ║ ║
║ Actual image ║ ║
║ ║ ║
║ ║ ║
║ ║ ║
║══════════════╝ ║
╚══════════════════════════════════════════════╝
您可以在下面看到我的ImageView XML。 <{1}},maxHeight
和maxWidth
在运行时设置。
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"
/>
。
答案 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中添加drawableLeft。
像这样(在你的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_content
和layout_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代码中设置maxHeight
,maxWidth
和adjustViewBounds
。