在Android中使用XML中的ImageView平铺图片

9

我正在尝试将一张图片作为背景平铺,直到整个背景都被填满。

我的当前代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/cartoonclouds"
    android:contentDescription="@string/desc"
    android:tileMode="repeat" />
  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/hello" />
  </LinearLayout>
</RelativeLayout>

然而,这只是使图像从下到上覆盖(不是平铺),但没有从左到右。我应该做什么?
编辑:尝试了XML版本:
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:tileMode="repeat"
    android:src="@drawable/cartoonclouds" />

main.xml可以在与同一文件夹内查找cartoonclouds,但无法找到该XML文件。

1个回答

36

首先,将您的图像放在类似res/drawable/cloud.png的文件中。这使得它可以通过@drawable/cloud在您的应用程序中访问。但是现在它还不是平铺的。

接下来,您应该定义一个带有android:tileMode="repeat"属性的位图资源(1)。例如,您可以在mytileablebitmap.xml文件中定义它:

<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:tileMode="repeat" 
android:src="@drawable/cloud"/>
这是引用您原始的平铺图像(drawable/cloud),并创建一个知道如何平铺自己以填充可用空间的Drawable。
然后,当您想使用平铺背景时,请使用"@drawable/mytileablebitmap"。
(1): http://developer.android.com/guide/topics/resources/drawable-resource.html

2
好的,我按照你说的做了,但是在我的main.xml文件中,它可以识别@drawable/cloud,但不能识别@drawable/mytileablebitmap,尽管这两个都存在,一个是.jpg格式,一个是.xml格式。(在XML文件中给我报错) - user938787
10
哦,我发现如果想在ImageView中使用这个平铺的可绘制对象,那么有必要将它的ScaleType设置为fitXY。我还更改了位图可绘制对象——在需要沿Y轴平铺的地方,将android:gravity设置为fill_vertical,在需要沿X轴平铺的地方,将其设置为fill_horizontal。这可能会对某些人有所帮助。 - JWL
@nemesisfixx:ScaleType适合fitXY是我缺失的唯一部分。这是其中最重要的一点! - Nishant Chauhan

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