旋转屏幕后防止 SplashScreen 显示

Prevent SplashScreen display after rotate screen

我有 SplashScreen 这样的渐变动画。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val splashScreen = installSplashScreen()
        splashScreen.setOnExitAnimationListener { splashScreenProvider ->
            val fadeAnim = ObjectAnimator.ofFloat(
                splashScreenProvider.view, View.ALPHA, 1f, 0f
            )
            fadeAnim.duration = 500L
            fadeAnim.interpolator = AccelerateInterpolator()
            fadeAnim.doOnEnd { splashScreenProvider.remove() }
            fadeAnim.start()
        }
        setContentView(R.layout.activity_main)
    }
}

主题

<style name="Theme.MySplash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">#000</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/ic_baseline_play_arrow_24</item>
    <item name="windowSplashScreenAnimationDuration">200</item>

    <item name="postSplashScreenTheme">@style/Theme.AppTheme</item>
</style>

启动应用程序时运行良好。但是,当我旋转屏幕时,SplashScreen 再次显示。
如果我远程控制淡入淡出动画,SplashScreen 效果很好(旋转屏幕后不会显示)。

如何在不移除淡入淡出动画的情况下防止 SplashScreen 旋转屏幕后显示?

保存动画状态,比方说,一个布尔值 isPlayed。在动画播放时将其设置为 true 并使用 savedInstanceState 保存状态。在onCreate里面,创建一个if-check,只播放不播放的动画。

检查 savedInstanceState 是否为 null

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            val splashScreen = installSplashScreen()
            splashScreen.setOnExitAnimationListener { splashScreenProvider ->
                val fadeAnim = ObjectAnimator.ofFloat(
                    splashScreenProvider.view, View.ALPHA, 1f, 0f
                )
                fadeAnim.duration = 500L
                fadeAnim.interpolator = AccelerateInterpolator()
                fadeAnim.doOnEnd { splashScreenProvider.remove() }
                fadeAnim.start()
            }
        }
        setContentView(R.layout.activity_main)
    }
}