アプリケーションAndroid 12 Splash Screen


Splash Screenとは?


既存のSplash Screenの適用を参照してください.

🛠 アンドロイド12リリース


韓国時間21年10月5日、Android 12が発売された.
複数の変更点がありますが、アプリケーションを起動するSpalsh Screenを自動的に生成する機能があります.
開発者が何も設定しなくても、アプリケーションアイコンはSplashトピックに適用されます!
... こんなに幸せに暮らせたらいいのに、問題がある.

なぜSplash Screenを適用するのですか?


1.SDKのUIと一致しない


何の作業も完了していないアプリケーションでは、ウェルカム画面が実装されていますが、アプリケーションアイコンではなく他の画像が適用されます.
アンドロイド12および以下のバージョンでは、「ようこそ」画面で異なる結果が得られます.

2.Splash活動と繰り返し


ウェルカムスクリーンを設定する方法には、ウェルカムスクリーンをアクティブスクリーンに設定してメイン画面に移動する方法がたくさんあります.
私はスタート画面を単独でアクティブ画面に置いていないので、2番目の問題は問題ありません.
他のアプリケーションを使用する場合、Android 12にはアプリケーションアイコンが表示されます.
既存のウェルカム画面も登場し、ユーザーインタフェース/UXの体験が悪い.

3.リポジトリからデータを読み込む


2つ目の問題を解決するには、activityを削除し、基本アプリケーションアイコンを起動画面として使用します.
しかし、画面起動時にリポジトリからデータをロードし、準備ができたらメイン画面に移動するアプリケーションでは?
データをロードして準備する前に起動画面を維持する論理を実現する必要があります.
このため、Splash ScreenはAndroid 12と併用される.
より良い体験をするために、アニメーションアイコンを使用しました.

👀 プレビュー


基本



終了アニメーションを追加



実際の応用



コードはGitHub Sampleを参照してください.

🔥 適用


準備作業

  • Android 12版テスター(またはシミュレータ)
  • Animated Vector Drawable
  • 2番の準備物の過程.
    Animated Vector Driveableの作成を参照してください.
    詳しい過程を書こうと思っていたのですが面倒でした...読んでいるときに気になることがあったらメッセージを残してください.できるだけ皆さんに伝えます.
    もしこの過程が面倒だったら、次の私が作ったサンプルを使ってもいいです.(ハートを押してください!まばたき!😉)
    ダウンロード例Animated Vector Driveable完全版

    プロセス


    ライブラリの追加->drawableフォルダにAnimated Vector Drawable->トピックを追加します.xmlの変更->必要に応じてviewTreeObserverリスナーを追加

    📌 ライブラリの追加

    implementation("androidx.core:core-splashscreen:1.0.0-beta01")

    📌 drawableフォルダにAnimated VectorDrawableを追加



    📌 themes.xmlの変更

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools">
    
        <style name="Theme.Test" parent="Theme.MaterialComponents.Light.NoActionBar">
        	...
            <!-- Customize your theme here. -->
            <item name="android:windowSplashScreenBackground">@color/white</item>
            <item name="android:windowSplashScreenAnimatedIcon">@drawable/avd_anim</item>
            <item name="android:windowSplashScreenAnimationDuration">500</item>
            ...
        </style>
    </resources>
    正式なドキュメントの説明アイコンは次のように構成されています.

    1πアプリケーションアイコンは、静的またはアニメーション可能なVectorDrawbleでなければなりません.アニメーションは1秒を超えないことを強くお勧めします.
    2オプションのアイコンと背景のコントラストが必要な場合に便利です.アダプティブアイコンを使用して、背景とコントラストが十分に高い場合は、背景が表示されます.
    3」背景の1/3が隠されています.
    4ππ背景は単一色からなる.アトリビュートが設定されていない場合は、既定でこのアトリビュートが使用されます.
    avd animファイルを白い背景のアニメーションアイコンに設定します.windowSplashScreenAnimationDurationオプションは、ウェルカム画面表示の実際の時間には影響しません.
    終了画面アニメーションをカスタマイズすると影響します.
    (viewTreeObserverリスナーを使用して、Splash画面が最短時間または特定時間で一定に保たれていることを確認してください.)

    📌 必要に応じてviewTreeObserverリスナーを追加

    // Create a new event for the activity.
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Set the layout for the content view.
        setContentView(R.layout.main_activity)
    
        // Set up an OnPreDrawListener to the root view.
        val content: View = findViewById(android.R.id.content)
        content.viewTreeObserver.addOnPreDrawListener(
            object : ViewTreeObserver.OnPreDrawListener {
                override fun onPreDraw(): Boolean {
                    // Check if the initial data is ready.
                    return if (viewModel.isReady) {
                        // The content is ready; start drawing.
                        content.viewTreeObserver.removeOnPreDrawListener(this)
                        true
                    } else {
                        // The content is not ready; suspend.
                        false
                    }
                }
            }
        )
    }
    falseに戻ると、描画ビューが停止します.trueに戻ると、ビューの描画が開始され、アクティビティが開始されます.
    リポジトリからデータをロードするか、特定の操作の後にビューを描画する必要がある場合は、これを使用します.

    追加


    ウェルカム画面を閉じたい場合は
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
    
        // Add a callback that's called when the splash screen is animating to
        // the app content.
        splashScreen.setOnExitAnimationListener { splashScreenView ->
            // Create your custom animation.
            val slideUp = ObjectAnimator.ofFloat(
                splashScreenView,
                View.TRANSLATION_Y,
                0f,
                -splashScreenView.height.toFloat()
            )
            slideUp.interpolator = AnticipateInterpolator()
            slideUp.duration = 200L
    
            // Call SplashScreenView.remove at the end of your custom animation.
            slideUp.doOnEnd { splashScreenView.remove() }
    
            // Run your animation.
            slideUp.start()
        }
    }
    示すように、コードを追加することで、終了アニメーションをカスタマイズできます.
    公式ファイルにはアイコンサイズや注意事項がたくさんありますので、お読みください.

    リファレンス


    Android12's Splash Screen API
    Android Developers - Splash Screen