Android Spla sh Экран: Масштабное растровое изображение - PullRequest
1 голос
/ 04 февраля 2020

Я в основном использую следующие xml для Android Spla sh Экран : пустое действие с windowBackground:

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

background_splash.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/defaultBackground" />
    </item>
    <item>
        <bitmap
            android:src="@drawable/logo"
            android:tileMode="disabled"
            android:gravity="center"/>
    </item>
</layer-list>

Это прекрасно работает, если logo.png меньше размера экрана. Если logo.png больше экрана, он выходит за пределы экрана.

Я вижу 3 обходных пути, но у всех есть недостатки:

  1. Установка left / right в <item, но для этого требуется API 23 +
  2. Варьируется @drawable/logo для xhdpi, xxhdpi и c. но я использую Density Split, который сломал бы его при повторном использовании apk для других устройств (apk sites, «Move to new device» - приложения, передающие apks et c.)
  3. Использовать макет с ImageView, но с заметной задержкой

Как это сделать правильно / без недостатков?

1 Ответ

0 голосов
/ 13 февраля 2020

Я не нашел хорошего решения, поэтому я посмотрел, как реализован заставка Google Диска.

В основном они используют один splash.png с 384x384px, поместили его в drawable-xhdpi и использовали следующее xml :

<?xml version="1.0" encoding="utf-8"?>
<layer-list android:opacity="opaque"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/defaultBackground" />
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash" />
    </item>
</layer-list>

Это выглядит хорошо на всех устройствах (которые я тестировал) и решает мои проблемы (в частности, 2). Настоятельно рекомендуется!

...