Giải pháp đã chỉnh sửa sẽ làm cho SplashScreen của bạn trông tuyệt vời trên tất cả các API bao gồm API21 đến API23
Trước hết đọc này bài viết và làm theo cách tốt để thực hiện một màn hình giật gân.
Nếu biểu trưng của bạn bị méo hoặc không vừa và bạn chỉ nhắm mục tiêu APIs24 +, bạn có thể chỉ cần thu nhỏ véc tơ có thể vẽ trực tiếp trong tệp xml của nó như sau:
<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>
trong đoạn mã trên, tôi đang thay đổi tỷ lệ có thể vẽ mà tôi đã vẽ trên canvas 640x640 thành 240x240. sau đó tôi chỉ cần đặt nó vào màn hình giật gân của tôi có thể vẽ như vậy và nó hoạt động tuyệt vời:
<?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ã của tôi thực sự chỉ vẽ hình tam giác trong hình ở dưới cùng nhưng ở đây bạn thấy những gì bạn có thể đạt được với điều này. Độ phân giải cuối cùng cũng tuyệt vời trái ngược với các cạnh pixel mà tôi nhận được khi sử dụng bitmap. vì vậy hãy sử dụng vector có thể vẽ được bằng mọi cách (có một trang web tên là vectr mà tôi đã sử dụng để tạo của tôi mà không cần phải tải xuống phần mềm chuyên dụng).
CHỈNH SỬA để làm cho nó hoạt động cũng trên API21-22-23
Mặc dù giải pháp trên hoạt động cho các thiết bị chạy API24 +, tôi thực sự thất vọng sau khi cài đặt ứng dụng của mình một thiết bị chạy API22. Tôi nhận thấy rằng màn hình giật gân lại đang cố lấp đầy toàn bộ khung cảnh và trông giống như đồ dở hơi. Sau khi xé đôi lông mày của mình trong nửa ngày, cuối cùng tôi đã buộc phải có một giải pháp bằng sức mạnh ý chí tuyệt đối.
bạn cần tạo một tệp thứ hai có tên giống hệt như splashscreen xml (giả sử như splash_screen.xml) và đặt nó vào 2 thư mục có tên là drawable-v22 và drawable-v21 mà bạn sẽ tạo trong thư mục res / (để xem chúng bạn nhé. phải thay đổi chế độ xem dự án của bạn từ Android sang Dự án). Điều này phục vụ cho việc yêu cầu điện thoại của bạn chuyển hướng đến các tệp được đặt trong các thư mục đó bất cứ khi nào thiết bị liên quan chạy API tương ứng với hậu tố -vXX trong thư mục có thể kéo, hãy xem liên kết này . đặt mã sau vào danh sách Lớp của tệp splash_screen.xml mà bạn tạo trong các thư mục này:
<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>
Vì một số lý do cho các API này, bạn phải bọc tệp có thể vẽ của mình trong một bitmap để làm cho nó hoạt động và cho kết quả cuối cùng trông giống nhau. Vấn đề là bạn phải sử dụng aproach với các thư mục có thể vẽ bổ sung vì phiên bản thứ hai của tệp splash_screen.xml sẽ dẫn đến màn hình giật gân của bạn hoàn toàn không được hiển thị trên các thiết bị chạy API cao hơn 23. Bạn cũng có thể phải đặt phiên bản đầu tiên của splash_screen.xml thành drawable-v24 khi android đặt mặc định vào thư mục drawable-vXX gần nhất mà nó có thể tìm thấy cho các tài nguyên.