防止背景图像拉伸视图

时间:2011-01-18 11:27:02

标签: android

每当我将背景分配给使用wrap_content布局的视图时,如果背景图像大于视图,则视图会被拉伸,以便它可以保持整个背景。为什么会如此以及如何预防呢?即使图像是9-patch并且标记了可伸展区域,也会出现这种情况 - 为什么图像缩小到视图大小?

6 个答案:

答案 0 :(得分:9)

您可以使用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>

答案 1 :(得分:2)

覆盖布局视图的方法getSuggestedMinimumWidthgetSuggestedMinimumHeight,或者背景drawable的方法getMinimumWidthgetMinimumHeight来实现这一目标。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用带有ImageView的FrameLayout作为第一个元素,而不是使用背景。然后使用android:scaleType =“center”,这样图像就不会缩放。它始终是原始尺寸,并且居中。然后你可以在FrameLayout中放置你喜欢的任何视图。

答案 4 :(得分:0)

这可能是一个疯狂的想法,但如何创建这样的特殊九补丁图像:

  • 拍摄原始图片
  • 在其周围添加2个像素边框(9个贴片标记为1个像素边框,1个像素为空边框)
  • 将空边框标记为可伸缩

这样,您将水平放置2个可伸展区域,垂直放置2个空边框。因此,图像的中心(您的原始图像保持未缩放)

不过,这可能不是最好的解决方案,但由于其他人已经列出了很好的解决方案,我想我也加上了这个解决方案; - )

答案 5 :(得分:0)

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

你怎么能阻止它:

一个。设置maxWidth属性。

湾尝试将ImageViewwrap_content放在具有固定宽度的布局中。

℃。 (我经常使用TableLayout作为其shrinkColumns和stretchColumns属性对于这样的事情很方便。也许这对你也有用。)

太多帮助,需要一些XML。