Edytowane rozwiązanie, które sprawi, że Twój SplashScreen będzie wyglądał świetnie na wszystkich interfejsach API, w tym API21 do API23
Przede wszystkim przeczytaj ten artykuł i postępuj zgodnie z DOBRYM sposobem tworzenia ekranu powitalnego.
Jeśli Twoje logo jest zniekształcone lub nie pasuje, a Twoim celem jest tylko APIs24 +, możesz po prostu zmniejszyć rozmiar swojego wektora do rysowania bezpośrednio w jego pliku 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>
w powyższym kodzie przeskaluję rysunek, który narysowałem na płótnie 640x640, do rozmiaru 240x240. potem po prostu umieściłem go na moim ekranie powitalnym do rysowania w ten sposób i działa świetnie:
<?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>
mój kod faktycznie rysuje tylko trójkąt na obrazku u dołu, ale tutaj widzisz, co możesz dzięki temu osiągnąć. Rozdzielczość jest w końcu świetna w przeciwieństwie do pikselowanych krawędzi, które uzyskiwałem podczas korzystania z bitmapy. więc używaj wektora, który można narysować na wszelkie sposoby (istnieje strona o nazwie vectr, której użyłem do stworzenia mojego bez konieczności pobierania specjalistycznego oprogramowania).
EDYTUJ, aby działał również na API21-22-23
Chociaż powyższe rozwiązanie działa na urządzeniach z API24 +, po zainstalowaniu mojej aplikacji na urządzeniu z API22 byłem bardzo rozczarowany. Zauważyłem, że ekran powitalny ponownie próbował wypełnić cały widok i wyglądał jak gówno. Po wyrywaniu brwi przez pół dnia w końcu brutalnie wymusiłem rozwiązanie siłą woli.
musisz utworzyć drugi plik nazwany dokładnie tak jak splashscreen xml (powiedzmy splash_screen.xml) i umieścić go w 2 folderach o nazwach drawable-v22 i drawable-v21, które utworzysz w folderze res / (aby je zobaczyć, musisz zmienić widok projektu z Androida na Projekt). Służy to do poinformowania telefonu, aby przekierował do plików umieszczonych w tych folderach, gdy odpowiednie urządzenie uruchamia interfejs API odpowiadający sufiksowi -vXX w folderze do rysowania, zobacz ten link . umieść następujący kod na liście warstw pliku splash_screen.xml, który tworzysz w tych folderach:
<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>
Z jakiegoś powodu w przypadku tych interfejsów API musisz owinąć twoją rysowaną mapę bitową, aby działała, a ostateczny wynik wygląda tak samo. Problem polega na tym, że musisz użyć podejścia z dodatkowymi folderami do rysowania, ponieważ druga wersja pliku splash_screen.xml spowoduje, że ekran powitalny nie będzie w ogóle wyświetlany na urządzeniach z interfejsami API wyższymi niż 23. Być może będziesz musiał również umieścić pierwsza wersja pliku splash_screen.xml do drawable-v24, jako że Android domyślnie ustawia najbliższy folder drawable-vXX, jaki może znaleźć dla zasobów.