通常の設定だとSplash画像にはアプリアイコンの画像がそのまま表示されます。
Splash画像のみ変更したい場合、どのようにするのかを共有します。
1. Splash用の画像ファイルを用意する
まず、Splash画面に表示したい画像を drawable フォルダに追加します。例えば、ic_splash.png という名前の画像ファイルを使うとします。
そして更に drwaableフォルダにxmlファイルを追加。例えば background_splash という名前にします。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_splash" />
</item>
</layer-list>
2.Splash用のテーマを作成する
次に、res/values/styles.xml にスプラッシュ画面専用のテーマを作成します。このテーマでは、android:windowBackground 属性に用意した画像を指定します。
APIレベル12以上では android:windowSplashScreenAnimatedIcon を設定しましょう
<style name="SplashTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
<!-- Android 12 (API level 31) 以上のバージョン向けに追加 -->
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="S">@drawable/background_splash</item>
</style>
3. AndroidManifest.xml にテーマを設定
次に、AndroidManifest.xml にスプラッシュ画面を表示するアクティビティに、先ほど作成したテーマを設定します。
<activity
android:name=".view.RouteActivity"
android:exported="true"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
以上で任意のSplash画像を表示すること出来ます😄
ただし、png画像で準備するとサイズ次第でスプラッシュ画像は強制的に円形に切り取られてしまいます。
僕がやった範囲だと、円形に収めるサイズにpngファイルを縮小した場合、画像がぼやけてしまう事象が発生しました。😭
スプラッシュ画面のサイズ
スプラッシュ画面のアイコンの仕様は、 アダプティブ アイコン 次のとおりです。
ブランド画像: 200×80 dp にする必要があります。
背景がアイコンのアプリアイコン: 240 × 240 dp とし、 直径 160 dp の円。
アイコンの背景のないアプリアイコン: 288×288 dp で、そのサイズに収まる必要があります 直径 192 dp の円。
たとえば、画像の合計サイズが 300 x 300 dp の場合、アイコンを直径 200 dp の円内に収める必要があります。円の外側はすべて曲がる 非表示(マスクされます)。
なのでできればsvgファイルからvector画像を生成し、その画像を使用するのが一番適正かと思います。
ベクター画像を使用する場合は、 background_splash を以下のように修正しましょう
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
<item
android:drawable="@drawable/ic_splash"
android:gravity="center" />
</layer-list>