2

Android 中的闪屏 API 引入windowSplashScreenAnimationDuration。有没有人注意到它对启动画面持续时间或动画持续时间有任何影响?即使我将其设置为建议的最大 1000 毫秒,有时启动画面的可见时间也少于此。如果我将其设置为 100 毫秒,则飞溅可见的时间更长。

此外,无论我的实际可绘制(xml)动画有多长 -windowSplashScreenAnimationDuration似乎都对其没有影响。

文档也很差。

有人可以对此有所了解吗?

谢谢!

4

2 回答 2

0

此时,androidx.core:core-splashscreen 为 1.0.0-alpha01。

似乎 windowSplashScreenAnimationDuration 值仅用于 v31 android:windowSplashScreenAnimationDuration。

https://android.googlesource.com/platform/frameworks/support/+/049995bd740483b4742affb9095889fb8bb9a735/core/core-splashscreen/src/main/res/values-v31/styles.xml#23

    <item name="android:windowSplashScreenAnimationDuration">
       ?windowSplashScreenAnimationDuration
   </item>

所以,windowSplashScreenAnimationDuration 在 android 12 平台之前是没有效果的。该值仅对 android 12(及以上)有效。

于 2021-08-29T14:40:34.710 回答
0

windowSplashScreenAnimationDuration 对持续时间没有直接影响。您使用 SplashScreenView#getIconAnimationDuration 检索持续时间值,并在您自己的业务逻辑中使用该值。

来自https://developer.android.com/guide/topics/ui/splash-screen#suspend-drawing

使用 windowSplashScreenAnimationDuration 来表示闪屏图标动画的持续时间。设置此项不会对显示初始屏幕的实际时间产生任何影响,但您可以在使用 SplashScreenView#getIconAnimationDuration 自定义初始屏幕退出动画时检索它。有关更多详细信息,请参阅下一节中的将初始屏幕保留更长时间。

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()
    }
}


// Get the duration of the animated vector drawable.
val animationDuration = splashScreenView.iconAnimationDuration
// Get the start time of the animation.
val animationStart = splashScreenView.iconAnimationStart
// Calculate the remaining duration of the animation.
val remainingDuration = if (animationDuration != null && animationStart != null) {
    (animationDuration - Duration.between(animationStart, Instant.now()))
        .toMillis()
        .coerceAtLeast(0L)
} else {
    0L
}
于 2022-01-01T06:32:33.837 回答