Phonegap安卓启动画面:不要被拉伸或使用9patch。

13
我有一个假的启动画面,在我的phonegap应用启动时弹出:
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html", 500);

我现在有三个不同的splash.png文件:hdpi、mdpdi和ldpi。我的问题是,即使在hdpi中,你会得到一些设备是480 x 800,而另一些设备是480 x 854,安卓仍然会拉伸我的启动图像来填充屏幕。

我更希望这张图片保持它的长宽比。根据我所了解的,9-patch方案不能与PhoneGap一起使用。如果可以,请告诉我如何做!我已经准备好了.9.png文件。

所以我能想到的另一个解决方案是防止安卓拉伸我的图片。我该如何做呢?

谢谢!


你应该在 Jira 上提出一个 bug,以便修复 9 patch 问题。https://issues.apache.org/jira/browse/CB - Simon MacDonald
如果您能采纳我的答案,那就太酷了 :) - robert
5个回答

14

在PhoneGap中,使用9patch解决方案可以实现启动画面。 :-)

  1. 通过创建一个名为splash.xml的xml文件(例如:res/drawable/splash.xml),定义一个新的drawable资源,内容如下:

<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/splashimg" 
android:dither="false"/>;  

注意它引用了一个真实的图像'splashimg',该图像应该是一个九宫格图像(见下文)。

  • 创建九宫格图像

  • 将所引用的九宫格图像添加到res/drawable或分辨率特定的文件夹中, 例如res/drawable/splashimg.9.png

  • 在扩展DroidGap类中引用新的drawable

    public void onCreate(Bundle savedInstanceState) {
    
        super.setIntegerProperty("splashscreen", R.drawable.splash);
    
    }
    
  • 这样你就可以利用Android中可绘制资源的强大功能,制作各种背景图像/效果。欲了解更多信息,请参阅http://developer.android.com/guide/topics/resources/drawable-resource.html


    3
    有没有办法我可以在PhoneGap Build中使用它? - Nathan Osman
    @will:不,我从来没有这样做过。 - Nathan Osman
    针对PG > 3.0,现在请在config.xml中使用以下设置,而不是扩展类:<preference name="splashscreen" value="splash-9" /><preference name="splashScreenDelay" value="3000" />该设置使用splash-9.png作为启动画面。 - metamagikum

    12

    无需提交错误报告,已有解决方案可供使用:只需将以下的splash.xml文件放置在res/drawable目录下(修改其中android:src属性),并在setIntegerProperty()函数调用中更改对R.drawable.splash的引用。

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

    请查看我的博客,获取更详细的设置说明。


    这对我来说不起作用,但因为它已经得到了4个赞,它可能是正确的。罗伯特的答案确实很好。 - Peter
    这个不太好用。在使用图片时,总会在某些边界上出现间隙。它不能与Nine-patch图片一起使用。 - Michael

    3

    对于使用phonegap 3.0的用户,您无需创建文件,只需在以下位置引用图像即可:

    super.setIntegerProperty("splashscreen", R.drawable.nameoftheninepatch);
    

    如果它正在被拉伸,只需按照DeadPassive的提示进行操作: 重要提示:这些图像必须填满黑色填充框(下和右边框);否则,您的应用程序的phonegap区域可能会以奇怪的方式被拉伸。

    1
    感谢您的 PhoneGap 3 笔记。 - shox

    0

    创建您的启动画面,例如命名为:"bitmap.png"

    然后在文件夹res/drawable中创建"splash.xml"

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

    在您的活动中,放置此代码:
    super.setIntegerProperty( "splashscreen", R.drawable.splash );
    

    0

    希望这篇文章能够帮到你,这是我在Stack Overflow上的第一篇文章。这个解决方案基于提供两个启动画面,设置适合的画面,锁定方向并在几秒钟后解锁,当启动画面隐藏时。 :)

    其他解决方案存在的问题:

    • 居中图片:如果您不想让启动画面全屏,这是一个可行的解决方案。当添加android:tileMode="clamp"时,我发现Android会忽略android:gravitiy,如果设置了android:tileMode。
    • 九宫格图片:这个概念很容易理解,但是我无论如何都无法将我的图像(带有中心标志)转换为九宫格图像,使其在缩放时保持标志居中。
    public class myApp extends DroidGap { private class TimerRunnable implements Runnable { @Override public void run() { // 解锁屏幕方向 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } }
    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
    // 设置启动画面并锁定屏幕方向 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { super.setIntegerProperty("splashscreen", R.drawable.splashscreen_landscape); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } else // ORIENTATION_PORTRAIT and ORIENTATION_UNDEFINED { super.setIntegerProperty("splashscreen", R.drawable.splashscreen_portrait); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); }
    // 启动计时器 Handler timerHandler = new Handler(); timerHandler.postDelayed(new TimerRunnable(), 5000);
    // 显示启动画面 super.loadUrl(Config.getStartUrl(), 5000); } }

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