我应该为Android中的不同设备创建多少尺寸的背景图片?

时间:2012-08-28 08:22:32

标签: android

在这里,我有一张320X480的图像(照片),并希望将它作为我的背景图像放在应用程序中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@drawable/background">    

</RelativeLayout>

然而,当我把它放在不同的设备上时,图像会变得非常奇怪(我不知道它是否很奇怪,因为它会重新调整图像的大小)。
那么,如何解决这个问题呢? 因为有照片和照片中有一个人。如果这个人在设备A中看起来很瘦但在设备B中非常胖,那将会非常奇怪。

2 个答案:

答案 0 :(得分:1)

有很多方法可以为全屏创建背景。我推荐的3个解决方案如下:

作为背景解决方案的一张图像是最常用于此工作的图像,您必须为每个主要屏幕尺寸= ldpi,mdpi,hdpi和xhdpi制作一个并使其成为:

  1. 以布局为中心,背景颜色与居中图像混合或
  2. 使其成为一个9-patch图像,以适当的方式伸展。
  3. 第三个解决方案是创建一个平铺布局,您可以在其中使用一个图像,然后以平铺的方式将其全部复制到屏幕上。
  4. 在某些情况下可能有效的方法是拥有1张图像,然后根据屏幕尺寸将其剪切掉。这可能有用,但如果图像太大,它会在小/旧手机上发出内存异常,因此再次为ldpi,mdpi,hdpi和xhdpi设置1张图像。
  5. (1)的例子:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@android:color/black">
        <FrameLayout
            android:background="@drawable/splash"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            >
        </FrameLayout>
    </RelativeLayout>
    

    飞溅图像可以有任何尺寸,重要的是图像的外部部分融入背景颜色,这可以通过使图像的背景颜色慢慢融入与背景相同的颜色来实现。

    (4)的例子:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@android:color/black">
        <ImageView
            android:background="@drawable/splash"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            >
        </ImageView>
    </RelativeLayout>
    

答案 1 :(得分:0)

九补丁是你的解决方案 或者你必须为每个密度提供图像。