Android SplashScreen API使用

Android 12 では SplashScreen の新機能が登場し、すべてのアプリケーションに新しいアプリケーション起動アニメーションが追加され、SplashScreen API を通じて専用のアプリケーション起動アニメーションをカスタマイズできます。

デフォルトでは、新しいアプリの起動アニメーションは背景が白で、アプリのアイコンが中央にあります。
デフォルトのアプリ起動アニメーション

次にSplashScreen APIを使って専用のアプリ起動アニメーションをカスタマイズする方法を紹介します。
これは Android 12 の新機能であるため、関連するすべての API では API 31 を使用する必要があるため、追加の value-v31 を作成し、そこに Themes.xml のコピーを配置する必要があります。
値-v31

背景色

デフォルトでは、アプリ起動アニメーションの背景は白です。
アプリケーション起動アニメーションの背景色をカスタマイズするには、アプリケーションが使用するテーマに次のコードを設定します。

<item name="android:windowSplashScreenBackground">@color/splash_screen_background</item>
<color name="splash_screen_background">#7B5AB6</color>

背景色を設定する
注意すべき点は、現時点では android:windowSplashScreenBackground を使用して設定された色は透明度を持たせないことです。6 ビットまたは 8 ビットであり、透明度は FF である必要があります。透明度のある色を使用すると効果がありません。

スタートアイコン

デフォルトでは、アプリアイコンはアプリ起動アニメーションの中心にあります。
アプリケーション起動アニメーションの中央アイコンをカスタマイズするには、アプリケーションが使用するテーマに次のコードを設定します。

<item name="android:windowSplashScreenAnimatedIcon">@drawable/cat</item>

スタートアイコン
元の画像は次のとおりです。
元の画像

  • 起動アイコンは部分的に切り取られるため、ある程度のパディングを保持する必要があることがわかります。
  • 静止画の設定に加えて、アニメーション形式も設定でき、設定では android:windowSplashScreenAnimationDuration を使用してアニメーション時間を設定します。
  • 設定したアイコンの背景が透明な場合は、android:windowSplashScreenIconBackgroundColor を追加で設定して、中央のアイコンの背景色をカスタマイズできます。

下の画像 (Google によって非推奨)

android:windowSplashScreenBrandingImage を使用して下部画像を設定します。画像サイズの比率は 2.5:1 である必要があります。

起動時間を遅らせる

android:windowSplashScreenAnimationDuration を使用して起動アニメーションの継続時間を設定しますが、最長は 1000 ミリ秒にのみ設定できます。
多くの場合、起動時にいくつかのアプリケーション構成を取得する必要があり、起動にかかる時間が長くなります。
ViewTreeObserver.OnPreDrawListener を通じてコードに実装できます。

class MainActivity : AppCompatActivity() {
    private var isAppReady = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val content: View = findViewById(android.R.id.content)
        content.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                if (isAppReady) {
                    content.viewTreeObserver.removeOnPreDrawListener(this)
                }
                return isAppReady
            }
        })
        delayBootTime()
    }

    private fun delayBootTime() {
        lifecycleScope.launch {
            delay(3000)
            isAppReady = true
        }
    }
}

アプリケーション構成の準備が完了すると、onPreDraw は true を返し、リスナーを削除します。ここでは、アプリケーション構成を取得するという時間のかかる操作をシミュレートするために、lay3 秒が使用されています。
onPreDraw は準備が完了した後に true を返さなければならないことに注意してください。そうしないと、常に起動ページでスタックしてしまいます。

終了アニメーションの開始

Android 12 SplashScreen の新機能には、起動時と終了時のアニメーション効果をカスタマイズするための setOnExitAnimationListener メソッドが用意されており、この API はバージョン 12 以降でのみ使用できます。

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            splashScreen.setOnExitAnimationListener { splashScreenView ->
                val slideUp = ObjectAnimator.ofFloat(
                    splashScreenView,
                    View.TRANSLATION_Y,
                    0f,
                    -splashScreenView.height.toFloat()
                )
                slideUp.duration = 2000
                // 在自定义动画结束时调用splashScreenView.remove()
                slideUp.addListener(object : AnimatorListenerAdapter() {
                    override fun onAnimationEnd(animation: Animator?) {
                        splashScreenView.remove()
                    }
                })
                slideUp.start()
            }
        }

下位バージョン互換性あり

Android 12 より前のバージョンでは、SplashScreen の起動アニメーションがなく、空白の背景ページが表示されるため、ユーザー エクスペリエンスが非常に悪くなります。したがって、Google は AndroidX で下位互換性のある SplashScreen ライブラリを提供しています。

構成

implementation 'androidx.core:core-splashscreen:1.0.0'

テーマを設定する

新しいテーマを定義し、アプリケーションに使用します。

    <style name="SplashScreenTheme" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/splash_screen_background</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/cat</item>
        <item name="postSplashScreenTheme">@style/Theme.SplashScreenDemo</item>
    </style>

注意すべき点がいくつかあります:

  • R.style.Theme_SplashScreen を親にする必要があります
  • 起動アイコンのアニメーション モードが失敗する
  • windowSplashScreenBackground と windowSplashScreenAnimatedIcon の前には Android はありません。
  • postSplashScreenTheme はアプリケーションの元のテーマを指定します。これにより、SplashScreen が終了したときにアプリケーションのテーマを復元できます。

起動アクティビティで設定

setContentView メソッドの前に必ず installSplashScreen メソッドを呼び出してください。setContentView メソッドは Compose の super.onCreate() 内で呼び出されるため、super.onCreate() の前に installSplashScreen を呼び出すことをお勧めします。

		installSplashScreen()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

これまでのところ、同じ効果を持つ SplashScreen アニメーションは下位バージョンでも使用できますが、もちろん、起動アニメーションや終了アニメーションなどの一部の Android 12 固有の API はまだ利用できません。

おすすめ

転載: blog.csdn.net/yuantian_shenhai/article/details/128727948