防止背景图像拉伸视图

每当我将背景分配给用wrap_content布置的视图时,如果背景图像大于视图,则视图被拉伸以便能够保持整个背景。 为什么如此以及如何预防呢? 即使图像是9补丁并且有可伸缩的区域标记,它也会出现 – 为什么图像没有缩小到视图的大小?

您可以使用RelativeLayout并在其中创build两个元素。 用于背景的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> 

重写布局视图的方法getSuggestedMinimumWidth和getSuggestedMinimumHeight ,或者可以通过绘制背景的getMinimumWidth和getMinimumHeight方法来实现。

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

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

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

  • 采取原始图像
  • 在它周围添加2个像素边框(9像素标记为1像素边框,1像素为空边框)
  • 将空白边框标记为可拉伸

这样你将有2个可拉伸区域水平,2垂直,这是空的边界。 因此,图像的中心(原始图像保持未缩放)

顺便说一下,这可能不是最好的解决scheme,但由于其他人已经列出了很好的解决scheme,我想我也join了这一个;-)

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

你怎么能阻止它:

一个。 设置maxWidth属性。

湾 尝试将带有wrap_contentImageView放在具有固定宽度的Layout中。

C。 (我经常使用TableLayout,因为它的shrinkColumns和stretchColumns属性对于这样的事情来说很方便,也许这也适用于你。)

太多的帮助,需要一些XML。