雁过留声 发表于 2025-3-12 07:53:53

android 启动动画splash screen

概要

Android Splash Screen 是应用启动时显示的第一个界面,通常用于展示应用的品牌标识或加载动画。它的紧张功能包括:
品牌识别:通过显示应用的 logo 或名称,增强用户对品牌的影象。
用户体验:在应用加载数据或初始化时,提供一个视觉上的过渡,避免用户看到空白屏幕。
加载时间:在应用启动过程中,如果需要较长时间来加载资源,Splash Screen 可以让用户在期待时不感到无聊。
https://i-blog.csdnimg.cn/direct/7dc8f7f01393490482bab7c1412df11a.gif#pic_center
实现时间

当用户启动应用时,如果应用的进程没有运行(冷启动)或 Activity 尚未创建(温启动),系统会根据你界说的主题和动画显示启动画面。应用准备就绪后,启动画面会主动关闭,显示应用界面。在热启动时,启动画面不会显示。
情况设置

起首由于这是android较新的特性,所以android项目的最低api/sdk版本为34
如果是Groovy构建的Gradle则在build.gradle文件中的defaultConfig进行修改,注意有两个build.gradle,我们需要修改模块的那个。
如果是Kotlin构建的则在build.gradle.kts文件中
https://i-blog.csdnimg.cn/direct/0637e38c29f44aa4921db08785657744.png
然后我们需要在dependencies中添加(Groovy)
dependencies { implementation "androidx.core:core-splashscreen:1.0.0" }
或者(Kotlin)
kotlin dependencies { implementation("androidx.core:core-splashscreen:1.0.0") }
https://i-blog.csdnimg.cn/direct/1a10a048c83d4f44b63eca2af93c6c40.png
准备素材

我们需要启动动画的图标以及在最下方显示的品牌图标
https://i-blog.csdnimg.cn/direct/12f7662242ac431785ea92dbaa65af2a.png
品牌图片:尺寸必须为 200×80 dp。
带有图标配景的应用图标:尺寸必须为 240×240 dp,并且位于直径 160 dp 的圆圈内。
无图标配景的应用图标:尺寸必须为 288×288 dp,并且位于直径 192 dp 的圆圈内。
还需要一个颜色资源文件colors.xml存储我们需要的颜色
https://i-blog.csdnimg.cn/direct/2eb6072377aa4422aabc14b12f5dd416.png
实现

在我们的主题资源文件中,我们可以通过添加splash screen的item来自界说启动动画
主题资源文件一样平常位于项目的res/value下,名字是themes.xml或者是styles.xml
https://i-blog.csdnimg.cn/direct/3cdec8d0c8da411f88141dd722ae9883.png
默认启动动画:
图标为manifest中设置的图标
https://i-blog.csdnimg.cn/direct/ec826b96693e40858e26b808980c9f8f.png
1.我们可以通过使用 windowSplashScreenBackground来改变启动动画的配景颜色:
<item name="android:windowSplashScreenBackground">@color/...</item>
将代码中的@color/…替换为自己的颜色
比如换成米色
https://i-blog.csdnimg.cn/direct/c1aeda3712144b39ac78b2f132c8fdbf.png
2.我们可以通过使用 windowSplashScreenAnimatedIcon 来替换中央图标
<item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
https://i-blog.csdnimg.cn/direct/a1e6decf4c0e49d6bfe92de27f4b91b5.png
3.使用 windowSplashScreenAnimationDuration 指示启动画面图标动画的时长。设置该时长对显示启动画面的现实时间不会产生任何影响,但可以在自界说启动画面退出动画时使用
<item name="android:windowSplashScreenAnimationDuration">1000</item>
4.我们可以使用 windowSplashScreenIconBackgroundColor设置图标的配景,这需要图标本身留有足够的透明的区域,这样才有设置配景色的空间,这可以增加图标与配景的对比度,在某些情况下很好用
(本例中配景空间较小,但是还是可以看出来配景色酿成了紫色)
https://i-blog.csdnimg.cn/direct/0c68476ba5ac4d889ea786928b1b2269.png
5.我们可以使用 windowSplashScreenBrandingImage 设置要显示在启动画面底部的商标图片
<item name="android:windowSplashScreenBrandingImage">@drawable/...</item>
https://i-blog.csdnimg.cn/direct/d9bc5d18d74e413aa202b3bc66b82f60.png
6.我们可以使用 windowSplashScreenBehavior 指定我们的应用是否始终在 Android 13 及更高版本中的启动画面上显示图标。默认值为 0;如果我们的启动 activity 将 splashScreenStyle 设置为 SPLASH_SCREEN_STYLE_ICON,则图标会在启动画面上显示。如果我们的启动 activity 未指定样式,则会遵循系统行为。如果我们不想显示空白启动画面,并盼望始终显示动绘图标,可以将此值设置为 icon_preferred。
<item name="android:windowSplashScreenBehavior">icon_preferred</item>
https://i-blog.csdnimg.cn/direct/6c8a193949684266a8649b6f6206d890.png
进一步的用法

1.让启动画面在屏幕上显示更长时间
比如Activity初始化2s后才放行描绘。
// Create a new event for the activity.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Set the layout for the content view.
    setContentView(R.layout.main_activity);

    // Set up an OnPreDrawListener to the root view.
    final View content = findViewById(android.R.id.content);
    content.getViewTreeObserver().addOnPreDrawListener(
            new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                  // Check whether the initial data is ready.
                  if (mViewModel.isReady()) {
                        // The content is ready. Start drawing.
                        content.getViewTreeObserver().removeOnPreDrawListener(this);
                        return true;
                  } else {
                        // The content isn't ready. Suspend.
                        return false;
                  }
                }
            });
}
https://i-blog.csdnimg.cn/direct/fdc0c02367d044be83662668e7bd6ed3.webp#pic_center
2.自界说用于关闭启动画面的动画
override fun onCreate(savedInstanceState: Bundle?) {
    ...
    customizeSplashScreenExit()
}

private fun customizeSplashScreenExit() {
    splashScreen.setOnExitAnimationListener { splashScreenView ->
      Log.d("Splash", "SplashScreen#onSplashScreenExit view:$splashScreenView")
      sleep(1000)
      Log.d("Splash", "SplashScreen#remove after sleeping")
      splashScreenView.remove()
    }
}
https://i-blog.csdnimg.cn/direct/9ee098bf9db04f5081fc4e11feb0ab5b.gif#pic_center
小结

splash screen可以方便地添加应用启动动画,并且轻易上手,推荐学习
作者:周旭辉
原文链接:https://developer.android.google.cn/develop/ui/views/launch/splash-screen?hl=zh-cn#java

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: android 启动动画splash screen