0

我有这样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在不删除淡入淡出动画的情况下防止旋转屏幕后显示?

4

1 回答 1

2

保存动画的状态,比如说一个 boolean isPlayed。动画播放时将其设置为 true 并使用savedInstanceState. 在里面onCreate,创建一个if-check只有在没有播放时才播放的动画。

于 2021-12-14T05:19:23.323 回答