Solution modifiée qui donnera à votre SplashScreen une belle apparence sur toutes les API, y compris API21 à API23
Tout d'abord, lisez cet article et suivez la BONNE façon de créer un écran de démarrage.
Si votre logo est déformé ou ne convient pas et que vous ciblez uniquement les API24 +, vous pouvez simplement réduire votre vecteur dessiné directement dans son fichier xml comme ceci:
<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>
dans le code ci-dessus, je redimensionne un dessinable que j'ai dessiné sur une toile 640x640 pour être 240x240. alors je viens de le mettre dans mon écran de démarrage dessiné comme ça et cela fonctionne très bien:
<?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>
mon code ne dessine en fait que le triangle dans l'image en bas, mais ici vous voyez ce que vous pouvez réaliser avec cela. La résolution est enfin excellente par rapport aux bords pixélisés que j'obtenais lors de l'utilisation de bitmap. alors utilisez un vecteur dessinable par tous les moyens (il existe un site appelé vectr que j'ai utilisé pour créer le mien sans avoir à télécharger un logiciel spécialisé).
EDIT afin de le faire fonctionner également sur API21-22-23
Bien que la solution ci-dessus fonctionne pour les appareils exécutant API24 +, j'ai été vraiment déçu après avoir installé mon application sur un appareil exécutant API22. J'ai remarqué que l'écran de démarrage essayait à nouveau de remplir la vue entière et ressemblait à de la merde. Après avoir arraché mes sourcils pendant une demi-journée, j'ai finalement forcé brutalement une solution par pure volonté.
vous devez créer un deuxième fichier nommé exactement comme le splashscreen xml (disons splash_screen.xml) et le placer dans 2 dossiers appelés drawable-v22 et drawable-v21 que vous créerez dans le dossier res / (pour les voir, vous devez changer la vue de votre projet d'Android en Projet). Cela sert à dire à votre téléphone de rediriger vers les fichiers placés dans ces dossiers chaque fois que l'appareil concerné exécute une API correspondant au suffixe -vXX dans le dossier pouvant être dessiné, voir ce lien . placez le code suivant dans la liste des couches du fichier splash_screen.xml que vous créez dans ces dossiers:
<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>
Pour une raison quelconque pour ces API, vous devez envelopper votre dessinable dans un bitmap afin de le faire fonctionner et de donner le même résultat au résultat final. Le problème est que vous devez utiliser l'approche avec les dossiers dessinables supplémentaires car la deuxième version du fichier splash_screen.xml entraînera que votre écran de démarrage ne s'affiche pas du tout sur les appareils exécutant des API supérieures à 23. Vous devrez peut-être également placer la première version de splash_screen.xml dans drawable-v24 car Android utilise par défaut le dossier drawable-vXX le plus proche qu'il peut trouver pour les ressources.