2012-09-26 43 views
15

我正在使用以下样式来显示在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)); 
    } 
    } 
+0

看一看这个[文章] (http://stackoverflow.com/questions/2521959/how-to-scale-an-image-in-imageview-to-keep-the-aspect-ratio),这是一个类似的问题。 – Michael

+0

它使用图像视图。这完全是窗口的背景。在MonoDroid中,加载环境时会暂停或暂停。我想在暂停期间显示启动画面。 – Telavian

回答

25

在Android中有几种可绘制的类型,包括实际的位图,九个补丁和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 documentation

+0

虽然这项工作通过不扩展图像,在平板电脑上我的飞溅图像周围有空的空间。是否可以在该xml文件中的'android:src =“@ drawable/background”'下面制作背景色? – lxknvlk

+3

当然,使用图层列表:) '<?xml version =“1.0”encoding =“utf-8”?> <项机器人:抽拉=” @色/白色” /> <位图的xmlns:机器人= “http://schemas.android.com/apk/res/android” 机器人:比重= “底部| CENTER_HORIZONTAL” 机器人:scaleGravity = “” 机器人:SRC = “@绘制/ background_splash” 机器人:TILEMODE = “禁用”/> ' –

3

它似乎采取的形象和最大限度地适应整个屏幕 而搞乱纵横比。因此,图像看起来很大,并且很糟糕。

有没有办法让它最大化,但保持纵横比,所以 它仍然看起来不错?

图像被放大的原因是因为你使用的图像具有更高像素比你正在测试该应用的设备屏幕的分辨率。为了解决这一点,最好的方法是创建适当的图像大小(像素)为不同的设备屏幕,然后把这些放在可绘制的文件(drawable-ldpi,drawable-mdpi,drawable-hdpi等)。

以下为各种显示最小屏幕尺寸的名单由谷歌(全像素)提供: -


对于Android移动设备

LDPI- 426×320

MDPI- 470 x 320

HDPI- 640 x 480

XHDPI- 960×720


对于Android平板设备

LDPI- 200×320

MDPI- 320×480

HDPI- 480 x 800的

XHDPI-720 x 1280


现在创建一个XML 绘制在res /绘制,这将提供飞溅活动的背景使用layer-list主题(Theme.Splash)。该图像加载在<bitmap>中,并且是中心使用重力属性对齐。

<!-- 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补丁图像,以便图像的边框可以伸展以适应屏幕的大小,而不会影响图像的静态区域。


参考链接:

大厦闪屏: https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

闪现屏幕图像尺寸: android splash screen sizes for ldpi,mdpi, hdpi, xhdpi displays ? - eg : 1024X768 pixels for ldpi