自适应显示启动画面图片

29

我正在使用以下样式来显示一个在MonoDroid编写的Android应用程序的启动画面。然而,它似乎会将图像最大化以适应整个屏幕,同时弄乱纵横比。因此,图像看起来巨大而且糟糕。

有没有办法让它最大化,但保持长宽比,使其仍然看起来好看?

<style name="Theme.Splash" parent="android:Theme">
  <item name="android:windowBackground">@drawable/splashscreenimage</item>
  <item name="android:windowNoTitle">true</item>
</style>

这是用 C# 创建启动画面并进入登录页的活动。

  [Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)]
  public class SplashScreenActivity : Activity
  {
    protected override void OnCreate(Bundle bundle)
    {
      base.OnCreate(bundle);

      // Start our real activity
      StartActivity(typeof(LoginActivity));
    }
  }

看一下这个帖子,它是一个类似的问题。 - Michael
使用了一个图像视图。这严格是窗口的背景。在MonoDroid中,加载环境时会有一两秒钟的暂停。我想在那个暂停期间显示一个启动画面。 - Telavian
2个回答

35

在Android中,有几种类型的可绘制对象,包括实际位图、nine-patch和XML文件。尝试使用一个赋予属性的XML文件将你的图像文件包装起来,然后使用XML文件作为可绘制对象而不是源图像。

假设你的XML文件名为scaled_background,原始图像只是background.png:

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

不要将背景设置为参考@drawable/background,而应将其设置为引用XML文件:@drawable/scaled_background在这个例子中。缩放模式的详细信息在Drawable文档中提到。


1
虽然这种方法可以避免拉伸图像,但在平板电脑上,我的启动画面周围会有空白区域。在XML文件中,是否可以在android:src="@drawable/background"下方添加一个颜色背景? - lxknvlk
3
当然,使用图层列表 :) `<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> </layer-list>` - Pavel Biryukov
6
请尝试将图像文件用XML文件包装,并为其添加属性。你能举个例子吗?我该如何将矢量可绘制文件包装在XML文件中? - Emil S.

7
似乎是将图像最大化以适应整个屏幕,同时破坏了宽高比。因此,图像看起来巨大且难看。有没有办法使其最大化,但保持纵横比,使其仍然看起来好看?
图像被放大的原因是您使用的图像具有比您测试应用程序的设备屏幕分辨率更高的像素。为解决此问题,最好的方法是创建适合不同设备屏幕的正确大小(像素)的图像,然后相应地将这些图像放入drawable文件(drawable-ldpi、drawable-mdpi、drawable-hdpi等)中。
以下是谷歌提供的各种显示器的最小屏幕尺寸列表(所有值都以像素为单位):
对于Android手机设备
LDPI- 426 x 320
MDPI- 470 x 320
HDPI- 640 x 480
XHDPI- 960 x 720
对于Android平板设备
LDPI- 200 x 320
MDPI- 320 x 480
HDPI- 480 x 800
XHDPI- 720 x 1280
现在在res / drawable中创建一个XML drawable,该drawable将使用layer-list在主题(Theme.Splash)中提供闪屏活动的背景。图像在中加载,并使用gravity属性进行居中对齐。
<!-- background_splash.xml -->
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splashscreenimage"/>
    </item>

</layer-list>

现在修改你的样式(Theme.Splash),将background_splash.xml设置为启动画面活动的主题背景。
<style name="Theme.Splash" parent="android:Theme">
    <item name="android:windowBackground">@drawable/background_splash.xml</item>
    <item name="android:windowNoTitle">true</item>
</style>

因此,图像应该保持纵横比并位于中心位置。

注意:对于图片的调整大小,您可以使用Adobe Photoshop(我发现它更容易使用)。需要进行一些实验来获得您想要的启动屏幕的正确图像大小。

根据个人喜好,您还可以使用9 Patch图像,以便图像的边框可以拉伸以适应屏幕的大小,而不影响图像的静态区域。


参考链接:

构建启动画面: https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

启动画面图像尺寸: android splash screen sizes for ldpi,mdpi, hdpi, xhdpi displays ? - eg : 1024X768 pixels for ldpi


使用的PNG被拉伸到全屏。 - Konstantin Konopko
3
在API 23及以上版本中,应使用<item android:gravity="center">代替<bitmap android:gravity="center" - Konstantin Konopko
@kaushik 你如何只针对平板电脑提及图片? - Suchith

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