概要
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后才放行描绘。
- // 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;
- }
- }
- });
- }
复制代码
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()
- }
- }
复制代码
小结
splash screen可以方便地添加应用启动动画,并且轻易上手,推荐学习
作者:周旭辉
原文链接:https://developer.android.google.cn/develop/ui/views/launch/splash-screen?hl=zh-cn#java
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |