android 启动动画splash screen

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

概要

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

实现时间

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

起首由于这是android较新的特性,所以android项目的最低api/sdk版本为34
如果是Groovy构建的Gradle则在build.gradle文件中的defaultConfig进行修改,注意有两个build.gradle,我们需要修改模块的那个。
如果是Kotlin构建的则在build.gradle.kts文件中

然后我们需要在dependencies中添加(Groovy)
dependencies { implementation "androidx.core:core-splashscreen:1.0.0" }
或者(Kotlin)
kotlin dependencies { implementation("androidx.core:core-splashscreen:1.0.0") }

准备素材

我们需要启动动画的图标以及在最下方显示的品牌图标

品牌图片:尺寸必须为 200×80 dp。
带有图标配景的应用图标:尺寸必须为 240×240 dp,并且位于直径 160 dp 的圆圈内。
无图标配景的应用图标:尺寸必须为 288×288 dp,并且位于直径 192 dp 的圆圈内。
还需要一个颜色资源文件colors.xml存储我们需要的颜色

实现

在我们的主题资源文件中,我们可以通过添加splash screen的item来自界说启动动画
主题资源文件一样平常位于项目的res/value下,名字是themes.xml或者是styles.xml

默认启动动画:
图标为manifest中设置的图标

1.我们可以通过使用 windowSplashScreenBackground来改变启动动画的配景颜色:
<item name="android:windowSplashScreenBackground">@color/...</item>
将代码中的@color/…替换为自己的颜色
比如换成米色

2.我们可以通过使用 windowSplashScreenAnimatedIcon 来替换中央图标
<item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>

3.使用 windowSplashScreenAnimationDuration 指示启动画面图标动画的时长。设置该时长对显示启动画面的现实时间不会产生任何影响,但可以在自界说启动画面退出动画时使用
<item name="android:windowSplashScreenAnimationDuration">1000</item>
4.我们可以使用 windowSplashScreenIconBackgroundColor设置图标的配景,这需要图标本身留有足够的透明的区域,这样才有设置配景色的空间,这可以增加图标与配景的对比度,在某些情况下很好用
(本例中配景空间较小,但是还是可以看出来配景色酿成了紫色)

5.我们可以使用 windowSplashScreenBrandingImage 设置要显示在启动画面底部的商标图片
<item name="android:windowSplashScreenBrandingImage">@drawable/...</item>

6.我们可以使用 windowSplashScreenBehavior 指定我们的应用是否始终在 Android 13 及更高版本中的启动画面上显示图标。默认值为 0;如果我们的启动 activity 将 splashScreenStyle 设置为 SPLASH_SCREEN_STYLE_ICON,则图标会在启动画面上显示。如果我们的启动 activity 未指定样式,则会遵循系统行为。如果我们不想显示空白启动画面,并盼望始终显示动绘图标,可以将此值设置为 icon_preferred。
<item name="android:windowSplashScreenBehavior">icon_preferred</item>

进一步的用法

1.让启动画面在屏幕上显示更长时间
比如Activity初始化2s后才放行描绘。
  1. // Create a new event for the activity.
  2. @Override
  3. protected void onCreate(@Nullable Bundle savedInstanceState) {
  4.     super.onCreate(savedInstanceState);
  5.     // Set the layout for the content view.
  6.     setContentView(R.layout.main_activity);
  7.     // Set up an OnPreDrawListener to the root view.
  8.     final View content = findViewById(android.R.id.content);
  9.     content.getViewTreeObserver().addOnPreDrawListener(
  10.             new ViewTreeObserver.OnPreDrawListener() {
  11.                 @Override
  12.                 public boolean onPreDraw() {
  13.                     // Check whether the initial data is ready.
  14.                     if (mViewModel.isReady()) {
  15.                         // The content is ready. Start drawing.
  16.                         content.getViewTreeObserver().removeOnPreDrawListener(this);
  17.                         return true;
  18.                     } else {
  19.                         // The content isn't ready. Suspend.
  20.                         return false;
  21.                     }
  22.                 }
  23.             });
  24. }
复制代码

2.自界说用于关闭启动画面的动画
  1. override fun onCreate(savedInstanceState: Bundle?) {
  2.     ...
  3.     customizeSplashScreenExit()
  4. }
  5. private fun customizeSplashScreenExit() {
  6.     splashScreen.setOnExitAnimationListener { splashScreenView ->
  7.         Log.d("Splash", "SplashScreen#onSplashScreenExit view:$splashScreenView")
  8.         sleep(1000)
  9.         Log.d("Splash", "SplashScreen#remove after sleeping")
  10.         splashScreenView.remove()
  11.     }
  12. }
复制代码

小结

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表