Подтвердить что ты не робот

Экран заставки Phonegap для Android: не растянутый или 9patch

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

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, а андроид растягивает мое изображение всплеска, чтобы заполнить экран.

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

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

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

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

  • Ссылка на новый чертеж в расширяемом классе DroidGap

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

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

Ответ 2

Нет необходимости поднимать ошибку, есть доступное решение: просто поместите следующий 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

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

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

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

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

Ответ 4

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

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

  • Центрированное изображение: это рабочее решение, если вы не хотите, чтобы ваш всплеск был полноэкранным. При добавлении android: tileMode = "clamp", я узнал, что 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);
    }
}

Ответ 5

Создайте свой заставку, назвав его, например: "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 );