防止背景图片拉伸视图

25
无论何时,当我将背景分配给一个使用wrap_content布局的视图时,如果背景图片大于该视图,则该视图会被拉伸以容纳整个背景。为什么会这样,如何防止呢?即使图片是9-patch并且有可拉伸的区域标记,它仍会发生-为什么图片不会缩小到视图的大小?

嗯,不太确定,但你试过这个了吗:https://dev59.com/j2025IYBdhLWcg3wnXWf#8501398 - Kevin Parker
这种方法无法缩小背景。 - jfcartier
6个回答

11

您可以使用RelativeLayout并在其中创建两个元素。一个ImageView用于背景,另一个视图用于内容。使用android:layout_alignBottom将ImageView与您的内容视图对齐,并将值设置为内容视图的id。还要将ImageView的scaleType设置为fitXY。

<RelativeLayout android:id="@+id/relativeLayout1" 
  android:layout_height="wrap_content" 
  android:layout_gravity="center" 
  android:layout_width="fill_parent">

<ImageView android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:scaleType="fitXY"
  android:src="@drawable/chronometer_bg"
  android:id="@+id/imageView_chronometerBackground"
  android:layout_alignBottom="@id/chronometer" />

<Chronometer android:text="Chronometer"
      android:id="@+id/chronometer" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true"
      android:textSize="32sp"
      android:gravity="center" />

</RelativeLayout>

2

3
基于代码的解决方案对于本应如此简单的事情来说确实过于繁琐。 - mix3d

0

为什么会这样呢?因为你将宽度设置为wrap_content

如何避免:

a. 设置maxWidth属性。

b. 尝试将带有wrap_contentImageView放置在具有固定宽度的布局中。

c.(我经常使用TableLayout,因为它的shrinkColumns和stretchColumns属性对于此类事情非常方便。也许这对你也有用。)

为了更好地帮助您,需要一些XML。


一个背景不是内容。建议wrap_content受背景大小的影响在逻辑上与提问者的问题不一致。【编辑:我并不是说droid不是那样工作——显然它确实是——但最初的问题是为什么它以那种方式工作以及该怎么做,而不是它是否以那种方式工作。】 - Lisa

0

你可以尝试将宽度和高度设置为类似于60dp而不是wrap_content,并使用android:scaleType


有时我不知道视图的大小会是多少(例如,一个包含TextView的气球)。 - Fixpoint

0

不要使用背景,而是使用一个带有 ImageView 作为第一个元素的 FrameLayout。然后使用 android:scaleType="center",这样图像就不会缩放。它将始终保持其原始大小并居中显示。然后您可以在 FrameLayout 中放置任何您喜欢的视图。


我不想保持原始大小,我希望它能缩小到视图的大小。 - Fixpoint

0

这可能是一个疯狂的想法,但是怎么样创建一个特殊的九宫格图片呢:

  • 获取原始图片
  • 在周围添加2像素的边框(1像素的边框用于标记九宫格,1像素的空白边框)
  • 将空白边框标记为可拉伸

这样你就会有2个水平的可拉伸区域和2个垂直的可拉伸区域,即空白边框。因此,图像的中心部分(即原始图像)保持不缩放。

顺便说一句,这可能不是最好的解决方案,但既然其他人已经列出了好的解决方案,我想也加上这个;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接