如何在android:windowBackground中处理位图的缩放和透明度

如何在android:windowBackground中处理位图的缩放和透明度,android,background,bitmap,Android,Background,Bitmap,我正在尝试为我的android应用程序设置一个全局背景图像。该图像是一个具有透明度的PNG文件。我按以下方式设置: <style name="MyAppTheme" parent="@style/Theme.AppCompat"> <item name="android:windowBackground">@drawable/background_main</item> </style> 我的PNG文件应始终位于屏幕底部,并始终缩放以匹配

我正在尝试为我的android应用程序设置一个全局背景图像。该图像是一个具有透明度的PNG文件。我按以下方式设置:

<style name="MyAppTheme" parent="@style/Theme.AppCompat">
    <item name="android:windowBackground">@drawable/background_main</item>
</style>
我的PNG文件应始终位于屏幕底部,并始终缩放以匹配屏幕大小。然而,使用上述代码,我面临两个问题

  • PNG文件的透明背景是黑色的,而我希望它是白色的
  • PNG文件比屏幕宽度大,因此,我只能看到它的一部分。它没有缩放以匹配屏幕的宽度 如果不需要编写Java代码,我如何完成这两件事呢?(虽然这总比什么都没有好…)

    问题1可以通过
    drawable/background_main.xml中的
    层列表解决:

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/background_main_bitmap"
            android:gravity="bottom|center_horizontal" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#ffffff"/>
            </shape>
        </item>
        <item>
            <bitmap
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:src="@drawable/background_main_bitmap"
                android:gravity="bottom|center_horizontal|fill_horizontal" />
        </item>
    </layer-list>
    
    
    

    问题#2仍然存在…

    实际上,使用
    图层列表
    可能会给您带来预期的:

    默认情况下,所有可绘制项目都会缩放以适合包含视图的大小。因此,将图像放置在不同位置的图层列表中可能会增加视图的大小,并且某些图像会根据需要进行缩放。为避免缩放列表中的项目,请使用
    元素中的
    元素指定可绘制的对象,并将重力定义为不缩放的对象,例如
    “中心”

    因此,以下可抽出式将适合您的要求:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:drawable="@android:color/white" />
      <item android:drawable="@drawable/background_main_bitmap" />
    </layer-list>
    

    只需更改android:gravity的属性,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/flush"
            android:gravity="fill_horizontal|fill_vertical"/>
    

    我没有对#2的答案,但分层可绘制文件的编写可能要简单得多:
    这不起作用,因为窗口背景不是视图。只是一个可以拉的。