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

时间:2013-10-12 11:00:09

标签: android background bitmap

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

<style name="MyAppTheme" parent="@style/Theme.AppCompat">
    <item name="android:windowBackground">@drawable/background_main</item>
</style>

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" />

我的PNG文件应始终位于屏幕底部,并且会缩放以始终与屏幕尺寸相匹配。但是,使用上面的代码,我遇到了两个问题。

  1. PNG文件的透明背景为黑色,而我希望它是白色。
  2. PNG文件大于屏幕宽度,因此,我只能看到它的一部分。它没有缩放以匹配屏幕的宽度。
  3. 如何在不编写Java代码的情况下完成这两件事? (虽然它会比没有好......)

3 个答案:

答案 0 :(得分:1)

问题#1可以通过layer-list中的drawable/background_main.xml来解决:

<?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仍然存在......

答案 1 :(得分:0)

只需更改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 :(得分:-1)

实际上,使用layer-list可能会给您预期的scaling

  

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

因此,以下drawable将适合您的要求:

<?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>