Android 12上全新的应用启动画面,还不适配一下?(1)

简介: Android 12上全新的应用启动画面,还不适配一下?(1)

早期的Android上App的启动速度常为人诟病,如今的启动表现已不逊iOS。Google针对系统的不断优化绝对功不可没,从8.0独立出来的SplashWindow,到12上推出的全新SplashScreen

在App的主要内容展示之前,按照需求的不同,或多或少会先展示这样几个画面。

画面 用途
Splash Screen 展示品牌Logo或Slogan
Advertisement Screen 展示节日活动或日常广告
Guide Screen 演示重点功能,一般只展示一次

20200308234636925.jpg

1 前言

我们常常花费精力去打造引导画面或广告画面,而作为第一印象的启动画面却容易被忽视。回想下以前都是怎么处理这个画面的:


一般通过设置windowSplashscreenContent属性来展示UI提供的启动图,系统将为它创建专门的Window


假使忘记设置这个属性的话,默认的白色背景将导致启动过程中会有个白画面一闪而过


要去掉这个突兀的白画面可不能简单地设置Background为null,不然一闪而过的又会变成黑画面


最终发现windowDisablePreview属性可以彻底关闭这个画面,这样一来确实没有任何突兀的画面一闪而过了


但这又会带来启动"变慢"的副作用,因为用来过渡的启动画面被关闭之后,App描画前屏幕几乎没有什么变化。即便App性能没有劣化,但为了留住用户,我们还是得好好对待这个启动画面。


然而现有的windowSplashscreenContent可供定制的空间着实有限。也许官方也注意到了这点,便精心设计了Splash Screen API,并在Android 12里重磅推出。


有了这个全新特性的帮助,启动画面的定制将更加自由、方便。先来看下采用SplashScreen API 快速定制的启动效果。

b41705914ab149ed906428aa9032a946.gif

下面将逐步演示全新SplashScreen可供定制的各个方面。

2 定制进入效果

采用xml即可快速定制各式进入效果。

2.1 默认的启动效果

默认情况下启动画面将展示白色背景和Launcher上的Adaptive Icon,也是不错的,比以前的白画面要好很多。

b41705914ab149ed906428aa9032a946.gif

2.2 自定义静态Icon

替换Icon为Adaptive Icon的前景图,背景色微调为米黄色。

<item name="android:windowSplashScreenBackground">@color/newSplashScreenColor</item>
<item name="android:windowSplashScreenAnimatableIcon">@drawable/ic_kotlin_hero_new</item>

b41705914ab149ed906428aa9032a946.gif

2.3 自定义Icon背景

Icon色调和画面背景色的对比不够明显的情况下,可以添加Icon背景色加强辨识度。

<item name=”android:windowSplashScreenIconBackground”>@color/newSplashIconMaskColor</item>

b41705914ab149ed906428aa9032a946.gif

2.4 自定义品牌Logo

添加品牌Logo可以展示企业形象或Slogan,使得启动画面更为完整和精细。

<item name=”android:windowSplashScreenBrandingImage”>@drawable/ic_tm_brand_newer</item>

b41705914ab149ed906428aa9032a946.gif

2.5 自定义动画Icon

动画形式的Icon可以增添设计和创意,使得启动流程更加流畅和有趣。

<item name="android:windowSplashScreenAnimatableIcon">@drawable/ic_kotlin_hero_new_animated_rotate</item>
<item name="android:windowSplashScreenAnimationDuration">@integer/icon_animator_duration</item>

比如让机器人图标旋转起来。

b41705914ab149ed906428aa9032a946.gif

再比如让机器人在Kotlin上侧滑。

b41705914ab149ed906428aa9032a946.gif

或者让几何图案拼凑出字母K之后和机器人汇合,象征着AndroidKotlin的强强联合。

b41705914ab149ed906428aa9032a946.gif

注意:

  • 动画Icon的时长上限为1000ms
  • 图标的进入动画可以定制,但由系统控制,不可以被监听和额外处理。

2.6 延长启动画面

The splash screen is dismissed as soon as your app draws its first frame. If you need to load a small amount of data such as in-app theme settings from a local disk asynchronously, you can use ViewTreeObserver.OnPreDrawListener to suspend the app to draw its first frame.

后台数据的加载难免耗时,启动画面结束了主要内容仍未加载好的话,体验不是太好。能够控制启动画面的持续时时长就好了。


现有的ViewTreeObserver的OnPreDrawListener回调是可以挂起描画的,如果我们在数据准备好之后再放行描画,就可以间接地延长启动画面的显示。


比如Activity初始化2s后才放行描画。

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        keepSplashScreenLonger()
    }
    private fun keepSplashScreenLonger() {
        // 监听Content View的描画时机
        val content: View = findViewById(android.R.id.content)
        content.viewTreeObserver.addOnPreDrawListener(
            object : ViewTreeObserver.OnPreDrawListener {
                override fun onPreDraw(): Boolean {
                    // 准备好了描画放行,反之挂起
                    return if (viewModel.isDataReady()) {
                        content.viewTreeObserver.removeOnPreDrawListener(this)
                        true
                    } else {
                        false
                    }
                }
            }
        )
    }
}
class MyViewModel(application: Application): AndroidViewModel(application) {
    companion object {
        const val WORK_DURATION = 2000L
    }
    private val initTime = SystemClock.uptimeMillis()
    fun isDataReady() = SystemClock.uptimeMillis() - initTime > WORK_DURATION
}

看一下效果,发现启动画面的展示时间确实变长了。

b41705914ab149ed906428aa9032a946.gif

相关文章
|
16天前
|
IDE Java 开发工具
深入探索安卓应用开发:从环境搭建到第一个"Hello, World!"应用
本文将引导读者完成安卓应用开发的初步入门,包括安装必要的开发工具、配置开发环境、创建第一个简单的安卓项目,以及解释其背后的一些基本概念。通过一步步的指导和解释,本文旨在为安卓开发新手提供一个清晰、易懂的起点,帮助读者顺利地迈出安卓开发的第一步。
197 65
|
16天前
|
存储 Java Android开发
探索安卓应用开发:构建你的第一个"Hello World"应用
【9月更文挑战第24天】在本文中,我们将踏上一段激动人心的旅程,深入安卓应用开发的奥秘。通过一个简单而经典的“Hello World”项目,我们将解锁安卓应用开发的基础概念和步骤。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供一次实操体验。从搭建开发环境到运行你的应用,每一步都清晰易懂,确保你能顺利地迈出安卓开发的第一步。让我们开始吧,探索如何将一行简单的代码转变为一个功能齐全的安卓应用!
|
3天前
|
安全 Java API
Java 泛型在安卓开发中的应用
在Android开发中,Java泛型广泛应用于集合类、自定义泛型类/方法、数据绑定、适配器及网络请求等场景,有助于实现类型安全、代码复用和提高可读性。例如,结合`ArrayList`使用泛型可避免类型转换错误;自定义泛型类如`ApiResponse&lt;T&gt;`可处理不同类型API响应;RecyclerView适配器利用泛型支持多种视图数据;Retrofit结合泛型定义响应模型,明确数据类型。然而,需注意类型擦除导致的信息丢失问题。合理使用泛型能显著提升代码质量和应用健壮性。
|
20天前
|
开发框架 搜索推荐 开发工具
打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第51天】本文是一篇面向初学者的Flutter入门教程,旨在通过简单易懂的语言和实际代码示例,引导读者步入跨平台移动应用开发的世界。文章首先介绍了Flutter的基本概念和优势,然后逐步展示了如何搭建开发环境、创建第一个Flutter应用,并实现了一个简单的待办事项列表。最后,文章探讨了Flutter在实现高性能和美观界面方面的潜力,鼓励读者发挥创意,探索更多可能。
72 15
|
11天前
|
监控 安全 Java
Kotlin 在公司上网监控中的安卓开发应用
在数字化办公环境中,公司对员工上网行为的监控日益重要。Kotlin 作为一种基于 JVM 的编程语言,具备简洁、安全、高效的特性,已成为安卓开发的首选语言之一。通过网络请求拦截,Kotlin 可实现网址监控、访问时间记录等功能,满足公司上网监控需求。其简洁性有助于快速构建强大的监控应用,并便于后续维护与扩展。因此,Kotlin 在安卓上网监控应用开发中展现出广阔前景。
10 1
|
21天前
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
在Android开发中,为应对复杂应用场景和繁重计算任务,多线程与异步编程成为保证UI流畅性的关键。本文将介绍Android中的多线程基础,包括Thread、Handler、Looper、AsyncTask及ExecutorService等,并通过示例代码展示其实用性。AsyncTask适用于简单后台操作,而ExecutorService则能更好地管理复杂并发任务。合理运用这些技术,可显著提升应用性能和用户体验,避免内存泄漏和线程安全问题,确保UI更新顺畅。
51 5
|
22天前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
47 2
|
3天前
|
XML 存储 Java
探索安卓开发之旅:从基础到进阶
【9月更文挑战第37天】安卓开发,一个充满无限可能的领域。它不仅关乎技术的深度与广度,更关乎开发者的成长与突破。本文将带你走进安卓开发的世界,从基础知识的学习到进阶技巧的掌握,一起感受编程的魅力与乐趣。
|
存储 Android开发 开发者
Android适配全面总结(三)----ROM适配
版权声明:本文为博主原创文章(部分引用他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/f9c67a4b908e 转载请标明出处:https://www.jianshu.com/p/f9c67a4b908e 本文出自 AWeiLoveAndroid的博客 第一篇文章讲了 Android适配全面总结(一)----屏幕适配 上一篇文章讲了 Android适配全面总结(二)----版本适配 这一篇文章讲一下 ROM适配。
2213 0
|
存储 API Android开发
Android适配全面总结(二)----版本适配
版权声明:本文为博主原创文章(部分引用他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/49fa8ebc0105 转载请标明出处:https://www.
1407 0