旋转屏幕后防止 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)
}
}
我有 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)
}
}