Отредактированное решение, благодаря которому ваш SplashScreen будет отлично выглядеть на всех API, включая API21 - API23.
Прежде всего, прочтите эту статью и следуйте ХОРОШЕМУ способу создания заставки.
Если ваш логотип искажен или не подходит, и вы ориентируетесь только на API 24 +, вы можете просто уменьшить масштаб вектора, который можно рисовать прямо в его XML-файле, например:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
android:strokeColor="#292929"
android:strokeWidth="24" />
</vector>
в приведенном выше коде я изменяю масштаб рисунка, который я нарисовал на холсте 640x640, до 240x240. Затем я просто помещаю его в свой экран-заставку, и он отлично работает:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">
<!-- The background color, preferably the same as your normal theme -->
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item
android:drawable="@drawable/logo_vect"
android:gravity="center">
</item>
</layer-list>
мой код на самом деле рисует только треугольник на картинке внизу, но здесь вы видите, чего с этим можно добиться. Наконец-то разрешение стало отличным по сравнению с пиксельными краями, которые я получал при использовании растрового изображения. так что используйте вектор, который можно рисовать любыми способами (есть сайт под названием vectr, который я использовал для создания своего без необходимости загружать специализированное программное обеспечение).
ИЗМЕНИТЬ, чтобы он работал также и с API21-22-23
Хотя приведенное выше решение работает для устройств с API24 +, я был очень разочарован, установив свое приложение на устройство с API22. Я заметил, что заставка снова пытается заполнить весь вид и выглядит дерьмом. Вырвав брови полдня, я наконец силой воли применил решение грубой силы.
вам нужно создать второй файл, названный точно так же, как splashscreen xml (скажем, splash_screen.xml), и поместить его в 2 папки с именем drawable-v22 и drawable-v21, которые вы создадите в папке res / (чтобы увидеть их, вы необходимо изменить вид вашего проекта с Android на Project). Это служит для указания вашему телефону перенаправления к файлам, размещенным в этих папках, всякий раз, когда соответствующее устройство запускает API, соответствующий суффиксу -vXX в папке с возможностью переноса, см. Эту ссылку . поместите следующий код в список слоев файла splash_screen.xml, который вы создаете в этих папках:
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item android:gravity="center">
<bitmap android:gravity="center"
android:src="logo_vect"/>
</item>
По какой-то причине для этих API вам нужно обернуть свой чертеж в растровое изображение, чтобы он работал, и окончательный результат выглядел бы так же. Проблема в том, что вам нужно использовать aproach с дополнительными папками с возможностью рисования, поскольку вторая версия файла splash_screen.xml приведет к тому, что ваш экран-заставка вообще не будет отображаться на устройствах с API выше 23. Возможно, вам также придется разместить Первую версию splash_screen.xml в drawable-v24, так как по умолчанию для Android используется ближайшая папка drawable-vXX, которую он может найти для ресурсов.