Заставка PhoneGap для Android: не растягивается или 9 патч - PullRequest
13 голосов
/ 09 февраля 2012

У меня есть фальшивый экран-заставка, который появляется при запуске моего приложения phonegap:

super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html", 500);

В настоящее время у меня есть 3 различных файла splash.png: hdpi, mdpdi и ldpi.Моя проблема в том, что даже в формате hdpi вы получите устройства с разрешением 480 x 800 и другие с разрешением 480 x 854, и Android растягивает мое заставку, чтобы заполнить экран.

Я бы предпочел иметь изображениесохранить его соотношение сторон.Из того, что я прочитал, решение с 9 патчами не будет работать с PhoneGap.Если да, пожалуйста, дайте мне знать, как!У меня есть .9.png готов к работе.Таким образом, другое решение, которое я могу придумать, состоит в том, чтобы предотвратить растяжение моего изображения Android.Как бы я это сделал?

Спасибо!

Ответы [ 5 ]

14 голосов
/ 25 мая 2012

Решение для 9-ти патчей действительно работает для заставок в PhoneGap :-)

  1. Определите новый ресурс для рисования, создав файл XML, т.е. res / drawable / splash.xml сследующее содержание:

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

    Обратите внимание, как оно ссылается на реальное изображение «splashimg», которое должно быть изображением из девяти патчей (см. ниже).

  2. Создайте девять изображений патчей

    • Подойдет любой png.
    • Затем используйте android-sdks / tools / draw9patch для определения девятиГраницы патча (см. http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch)
    • ВАЖНО: на этих изображениях поле заполнения (нижняя и правая границы) должно быть полностью заполнено черным, иначе область телефонного разрыва вашего приложения может быть странным образом растянута.
  3. Добавьте указанные девять изображений патчей либо в res / drawable, либо в определенные для разрешения папки, например, res / drawable / splashimg.9.png

  4. Ссылка на новый Drawable в вашем расширенном классе DroidGap

    public void onCreate(Bundle savedInstanceState) {
    
        super.setIntegerProperty("splashscreen", R.drawable.splash);
    
    }
    

Таким образом, вы можете создавать всевозможные фоновые изображения / эффекты, используя мощные ресурсы рисования в Android.Подробнее см. http://developer.android.com/guide/topics/resources/drawable-resource.html.

12 голосов
/ 01 марта 2012

Нет необходимости поднимать ошибку, есть решение: просто поместите следующий файл splash.xml в res / drawable (измените атрибут android: src ) и измените ссылку на R.drawable. splash, в вызове setIntegerProperty ().

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

Пожалуйста, смотрите мой Блог для более подробного описания установки.

3 голосов
/ 23 августа 2013

Для тех, кто использует phonegap 3.0, вам не нужно указывать splash.xml, вы просто ссылаетесь на изображение:

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

Если он растягивается, просто следуйте примечанию DeadPassive:

ВАЖНО: эти изображения должны иметь отступ (внизу и справа) границы) полностью закрашены черным или же область телефонной щели вашего приложение может быть растянуто странным образом.

0 голосов
/ 18 апреля 2015

Создайте заставку, назвав ее, например: «bitmap.png»

Затем создайте «splash.xml» в папке res / drawable

<?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 голосов
/ 03 октября 2013

Надеюсь, этот пост поможет, это мой первый опыт переполнения стека. Это решение основано на предоставлении двух заставок, установке подходящего экрана, блокировке ориентации и разблокировке через несколько секунд, когда заставка скрыта. :)

Проблемы с другими решениями:

  • Центрированное изображение: это рабочее решение, если вы не хотите, чтобы ваш всплеск был на весь экран. При добавлении android: tileMode = "зажим" я обнаружил, что Android игнорирует android: gravitiy, если установлен android: tileMode.
  • Девять патчей: эта концепция проста для понимания, но каким-то образом мне не удалось преобразовать мое изображение (с логотипом в центре) в изображение из девяти патчей, которое сохраняет логотип в центре при масштабировании.
public class myApp extends DroidGap
{
    private class TimerRunnable implements Runnable
    {
        @Override public void run()
        {
            // unlock orientation
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // set splash screen and lock orientation
        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);
        }

        // start timer
        Handler timerHandler = new Handler();
        timerHandler.postDelayed(new TimerRunnable(), 5000);

        // show splash screen
        super.loadUrl(Config.getStartUrl(), 5000);
    }
}
...