11

自从 Android 与 Android 12 一起发布了新的 Splash Screen API 以来,许多应用程序都存在重复启动画面、缺乏自定义等问题。

现在,可以在中间设置背景颜色和图标,但是可以自定义更多吗?由于现在我们仅限于使用单色背景和不可调整大小的徽标图标,这看起来不太好。

我想要实现的是一个自定义启动画面,可以将图像绘制为背景(或具有 2 个项目的图层列表 - 一个背景图像和一个居中徽标),因为它可以在 Android 12 之前使用。

有人成功实现了这种行为吗?

有一种解决方法可以将 windowIsTranslucent 属性设置为 true 并仅显示第二个启动画面(右侧),但它会引入糟糕的用户体验,因为看起来应用程序在几秒钟内没有响应。

4

1 回答 1

0

我做了这样的事情。首先删除默认drawable

 <style name="Theme.App.Starting" parent="Theme.SplashScreen">
      <item name="windowSplashScreenBackground">@color/...</item>
      <item name="windowSplashScreenAnimatedIcon">@android:color/transparent</item>
      <item name="postSplashScreenTheme">@style/AppTheme</item>
</style>

然后膨胀您的自定义启动视图

class MainActivity : AppCompatActivity(), SplashScreen.OnExitAnimationListener {

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          val installSplashScreen = installSplashScreen()
          installSplashScreen.setOnExitAnimationListener(this)
          setContentView(R.layout.activity_main)
      }


      override fun onSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) {
           val view = splashScreenViewProvider.view
           if (view is ViewGroup) {
               val binding = ActivityMainSplashBinding.inflate(layoutInflater,view, true)
               // Do what you want with your inflated view
               animate(view) {
                   // Remove splash
                   splashScreenViewProvider.remove()
               }
           }
       }



     private fun animate(view: View, doOnFinish: () -> Unit) {
         view.animate()
        .withEndAction(doOnFinish)
        .start()
     }
}

最后记得调用 splashScreenViewProvider.remove() 来移除飞溅。

于 2021-12-07T08:33:05.133 回答