IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 12 应用启动动画新功能 -> 正文阅读

[移动开发]Android 12 应用启动动画新功能

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、启动画面
二、启动画面的工作原理
三、自定义应用中的启动画面
四、 让启动画面在屏幕上显示更长时间

一、启动画面

Android 12 添加了?SplashScreen?API,它可为所有应用启用新的应用启动动画。这包括启动时的进入应用运动、显示应用图标的启动画面,以及向应用本身的过渡。

启动画面示例

这种新体验可让应用每次启动时都呈现标准设计元素,但它也可自定义,以便您的应用能够保持其独特的品牌。

二、启动画面的工作原理

当用户启动应用而应用的进程未在运行(冷启动)或 Activity 尚未创建(温启动)时,会发生以下事件。(在热启动期间从不显示启动画面。)

  1. 系统使用主题以及您已定义的任何动画显示启动画面。

  2. 当应用准备就绪时,会关闭启动画面并显示应用。

动画的元素和机制

动画的元素由 Android 清单中的 XML 资源文件定义。每个元素都有浅色模式和深色模式版本。

它们由窗口背景、动画形式的应用图标和图标背景组成:

启动画面的元素

关于这些元素,请注意以下几点:

  • 应用图标 (1) 应该是矢量可绘制对象,它可以是静态或动画形式。虽然动画的时长可以不受限制,但我们建议让其不超过 1000 毫秒。默认情况下,使用启动器图标。

  • 图标背景 (2) 是可选的,在图标与窗口背景之间需要更高的对比度时很有用。如果您使用一个自适应图标,当该图标与窗口背景之间的对比度足够高时,就会显示其背景。

  • 与自适应图标一样,前景的 ? 被遮盖 (3)。

  • 窗口背景 (4) 由不透明的单色组成。如果窗口背景已设置且为纯色,则未设置相应的属性时默认使用该背景。

启动画面动画机制由进入动画和退出动画组成。

  • 进入动画由系统视图到启动画面组成。这由系统控制且不可自定义。

  • 退出动画由隐藏启动画面的动画运行组成。如果您要对其进行自定义,您将可以访问?SplashScreenView?及其图标,并且可以在它们之上运行任何动画(需要设置转换、不透明度和颜色)。在这种情况下,当动画完成时,需要手动移除启动画面。

三、自定义应用中的启动画面

默认情况下,SplashScreen?使用主题的?windowBackground(如果它是单色)和启动器图标。启动画面的自定义通过向应用主题添加属性来完成。

您可以通过以下任一方式自定义应用的启动画面:

  • 设置主题属性以更改其外观

  • 让其在屏幕上显示更长时间

  • 自定义用于关闭启动画面的动画

设置启动画面的主题以更改其外观

您可以在 Activity 主题中指定以下属性来自定义应用的启动画面。如果您已有使用?android:windowBackground?等属性的旧版启动画面实现,不妨考虑为 Android 12 提供替代资源文件。

  1. 使用?windowSplashScreenBackground?以特定的单色填充背景:

    <item name="android:windowSplashScreenBackground">@color/...</item>
  1. 使用?windowSplashScreenAnimatedIcon?替换起始窗口中心的图标。如果对象通过?AnimationDrawable?和?AnimatedVectorDrawable?可呈现动画效果且可绘制,则也会在显示起始窗口的同时播放动画。

<item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
  1. 使用?windowSplashScreenAnimationDuration?设置启动画面在关闭之前显示的时长。最长时间为 1000 毫秒。

  2. 使用?windowSplashScreenIconBackground?设置启动画面图标后面的背景。当窗口背景与图标之间的对比度不够高时,这很有用。

   <item name=”android:windowSplashScreenIconBackground”>@color/...</item>
  1. (可选)您可以使用?windowSplashScreenBrandingImage?设置要显示在启动画面底部的图片。设计准则建议不要使用品牌图片。

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

四、 让启动画面在屏幕上显示更长时间

当应用绘制第一帧后,启动画面会立即关闭。如果您需要从本地磁盘异步加载少量数据(如应用内主题设置),您可以使用?ViewTreeObserver.OnPreDrawListener?让应用暂停绘制第一帧。

// 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 if the initial data is ready.
                    if (mViewModel.isReady()) {
                        // The content is ready; start drawing.
                        content.getViewTreeObserver().removeOnPreDrawListener(this);
                        return true;
                    } else {
                        // The content is not ready; suspend.
                        return false;
                    }
                }
            });
}

自定义用于关闭启动画面的动画

您可以通过?Activity.getSplashScreen?进一步自定义启动画面的动画。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...

    // Add a callback that's called when the splash screen is animating to
    // the app content.
    getSplashScreen().setOnExitAnimationListener(splashScreenView -> {
        final ObjectAnimator slideUp = ObjectAnimator.ofFloat(
                splashScreenView,
                View.TRANSLATION_Y,
                0f,
                -splashScreenView.getHeight()
        );
        slideUp.setInterpolator(new AnticipateInterpolator());
        slideUp.setDuration(200L);

        // Call SplashScreenView.remove at the end of your custom animation.
        slideUp.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                splashScreenView.remove();
            }
        });

        // Run your animation.
        slideUp.start();
    });
}

在此回调开始时,启动画面上动画形式的矢量可绘制对象已经开始。根据应用启动的时长,可绘制对象可能在其动画的中间。使用?SplashScreenView.getIconAnimationStartMillis?可了解动画何时开始。您可以按如下方式计算图标动画的剩余时长:

// Get the duration of the animated vector drawable.
long animationDuration = splashScreenView.getIconAnimationDurationMillis();
// Get the start time of the animation.
long animationStart = splashScreenView.getIconAnimationStartMillis();
// Calculate the remaining duration of the animation.
long remainingDuration = Math.max(
        animationDuration - (SystemClock.uptimeMillis() - animationStart),
        0L
);

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点击阅读原文,为大佬点赞!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:39:10  更:2021-08-22 13:40:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 22:29:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码