Soluzione modificata che renderà il tuo SplashScreen fantastico su tutte le API, comprese da API21 a API23
Prima di tutto leggi questo articolo e segui il BUON modo di creare una schermata iniziale.
Se il tuo logo è distorto o non si adatta e stai prendendo di mira solo API24 + puoi semplicemente ridimensionare il tuo vettore disegnabile direttamente nel suo file xml in questo modo:
<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>
nel codice sopra sto riscalando un disegnabile che ho disegnato su una tela 640x640 per essere 240x240. poi lo metto nella mia schermata iniziale disegnabile in questo modo e funziona alla grande:
<?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>
il mio codice in realtà disegna solo il triangolo nell'immagine in basso, ma qui vedi cosa puoi ottenere con questo. La risoluzione è finalmente ottima rispetto ai bordi pixelati che stavo ottenendo quando usavo la bitmap. quindi usa un vettore disegnabile con tutti i mezzi (c'è un sito chiamato vectr che ho usato per creare il mio senza il fastidio di scaricare software specializzato).
MODIFICA per farlo funzionare anche su API21-22-23
Sebbene la soluzione di cui sopra funzioni per i dispositivi che eseguono API24 +, sono rimasto davvero deluso dopo aver installato la mia app su un dispositivo con API22. Ho notato che lo splashscreen stava di nuovo cercando di riempire l'intera visualizzazione e sembrava una merda. Dopo aver strappato le sopracciglia per mezza giornata ho finalmente forzato una soluzione bruta per pura forza di volontà.
devi creare un secondo file chiamato esattamente come lo splashscreen xml (diciamo splash_screen.xml) e posizionarlo in 2 cartelle chiamate drawable-v22 e drawable-v21 che creerai nella cartella res / (per vederle tu cambiare la visualizzazione del progetto da Android a Project). Questo serve per dire al tuo telefono di reindirizzare ai file collocati in quelle cartelle ogni volta che il dispositivo in questione esegue un'API corrispondente al suffisso -vXX nella cartella disegnabile, vedi questo link . inserire il codice seguente nell'elenco dei livelli del file splash_screen.xml creato in queste cartelle:
<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>
Per qualche ragione per queste API devi racchiudere il tuo disegnabile in una bitmap per farlo funzionare e fare in modo che il risultato finale sia lo stesso. Il problema è che devi utilizzare l'approccio con le cartelle disegnabili aggiuntive poiché la seconda versione del file splash_screen.xml farà sì che la schermata iniziale non venga visualizzata affatto sui dispositivi che eseguono API superiori a 23. Potrebbe anche essere necessario posizionare la prima versione di splash_screen.xml in drawable-v24 come impostazione predefinita di Android nella cartella drawable-vXX più vicina che può trovare per le risorse.