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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Jetpack】Splash Screen闪屏 -> 正文阅读

[移动开发]【Jetpack】Splash Screen闪屏

Android12新款闪屏十分惊艳,搜了搜其他作者得文章,并查阅了一些资料,目前可见得是文章很少。闪屏功能已经支持到android 5-android 12,不过12之前的版本效果不如12。这位作者写得很好,拿来试用了一下,发现了很多问题,在此做下总结。

Jetpack新成员SplashScreen:打造全新的App启动画面

先看效果

?

?使用方式

首先values里面创建好themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.AppSplashScreen" parent="Theme.SplashScreen">
        <!--设置背景颜色-->
        <item name="windowSplashScreenBackground">@color/colorPrimary</item>
        <!--设置显示在屏幕中间的图标, 如果是通过 AnimationDrawable 和 AnimatedVectorDrawable 创建的对象,可呈现动画效果,则会在页面显示的时候,播放动画-->
        <item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_round</item>
        <!--设置显示动画不可见时,使用 APP 的默认主题-->
        <item name="postSplashScreenTheme">@style/Theme.AppTheme</item>
    </style>

    <!-- Base application theme. -->
    <style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 添加 APP 默认主题 -->
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

app/build.gradle? ?这里很重要 ,一定要改,不然会报错说找不到v31的文件,我感觉是因为这里还没完成适配的关系

android {

    compileSdkVersion 31
    ...
}

改一下theme主题

 <application
        ...
        android:icon="@mipmap/ic_launcher_round"
        android:theme="@style/Theme.AppSplashScreen">
  </application>
SplashScreenActivity
class SplashScreenActivity : ComponentActivity() {
    private lateinit var binding: ActivitySplashScreenBinding
    private var appReady = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ImmersionBar.with(this).init()
        binding = ActivitySplashScreenBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val splashScreen = installSplashScreen()
        with(binding) {
            // init view
        }
        /**
         * 保持持启动画面可见,直到我们的应用准备好。因为可能从本地磁盘或者网络异步加载数据,
         * 通过这个方法可以让应用暂停绘制第一帧。
         */
        splashScreen.setKeepVisibleCondition { !appReady }

        // 实现退出动画
        splashScreen.setOnExitAnimationListener { splashScreenViewProvider ->
            val splashScreenView = splashScreenViewProvider.view
            val iconView = splashScreenViewProvider.iconView
            val translationY = ObjectAnimator.ofFloat(
                iconView,
                View.TRANSLATION_Y,
                iconView.translationY,
                splashScreenView.height.toFloat()
            )
            translationY.interpolator = AnticipateInterpolator()
            translationY.duration = 2000L
            translationY.doOnEnd { splashScreenViewProvider.remove() }
            translationY.start()
        }

        // 模拟从本地磁盘或者网络异步加载数据的耗时操作
        Handler(Looper.getMainLooper())
            .postDelayed({ appReady = true }, 3000)
    }

}

activity_splash_screen

这里要特别注意 一定要在跟布局设置background,不然会出现这种问题

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="主界面"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

?剩下的具体需要什么效果,延时多久等操作,请自行修改activity的代码

收工

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:27:50  更:2021-08-28 09:30:06 
 
开发: 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/31 6:27:56-

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