写点什么

大佬教你如何处理 Android 启动页黑屏,以及原理解析,android 软件开发语言

用户头像
Android架构
关注
发布于: 10 小时前


具体方法如下:


style.xlm


<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">


<item name="android:windowBackground">@drawable/splash_icon</item>


</style>


同样将主题设置到启动的 Activity 的主题中,windowBackground 就是即将展示的 preview window。其中 splash_icon 可以是一整张图片,网上很多小伙伴也都是这么做的。其实它也可以是一个能解析出图片资源的 XML 文件,好像只有 layer-list 这种能做得到,因为它能够将多个 drawable 叠加起来展示。


splash_icon.xml


<?xml version="1.0" encoding="utf-8"?>


<layer-list xmlns:android="http://schemas.android.com/apk/res/android"


android:opacity="opaque">


<item android:drawable="@color/white"/>


<item>


<bitmap


android:gravity="center"


android:src="@drawable/qq"/>


</item>


</layer-list>


这样设置之后,当你点击 APP,会立马进入你配置的界面,然后启动欢迎页,效果如下


[图片上传失败…(image-50bde4-1542613871315)]


那么,将 preview window 直接设置为图片和设置为 xml 文件有什么区别或者优劣呢?我先卖个关子。先谈谈这种方案的优劣,首先这种方案已经解决了原生 preview window 的单调难看的问题,在原来的基础上进一步提升了用户体验。可是我们的 APP 都是有欢(guang)迎(gao)页的,从 preview window 跳转到欢(guang)迎(gao)页是不可避免的,这样的话,两个界面的切换就会显得很突兀的,


所以强迫症的我们,尝试让这两个界面的切换变成一个界面的变化,从而进一步提升显示效果,怎么样才能让两个界面切换看起来像是在同一个界面里的变化呢?答案就是: 动画。


在这种需求下,图片和 xml 文件的区别就出来了,因为后者可以帮助我们更准确的实现动画。




[](


)方案三:自定义 Preview Window 增强版




废话少说,我们先来看效果


[图片上传失败…(image-ec159f-1542613871315)]


有了动画之后,界面切换顺畅了许多。


上面的动画实现其实非常简单,无非就是放缩,移动,渐变的组合使用(我仅仅用作范例给大家参考),具体的动画代码细节就不谈了,有兴趣可以[去 github 上看本次项目的 demo](


),我们重点来聊一聊思路。


在这里我们需要明确一点的是,preview window 只能是静态图,它本身是


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


不展示动画的,我们这里的动画,其实是在进入欢迎页之后的展示的。明确了这一点之后,整个动画效果的实现思路其实就已经摆在我们眼前了,那就是当界面从 Preview Window 跳转到 欢迎页 的时候,欢迎页必须首先展示一个和 Preview Window 一模一样的界面,让人看起来好像界面还没切换一样,然后再慢慢切换到欢迎页。


然后,我们再来谈谈为什么设置 xml 的方式可以帮助我们更准确的实现动画,就是因为要保证 Preview Window 欢迎页最开始展示的界面保持绝对一致,只有通过 xml 的布局才是达到这种效果。


好了,启动页做到这个份儿上,应该就可以交货了,不过还有一个小问题需要大家注意的,那就是我们给 Preview Window 设置的背景图如果不做处理,图片就会一直存在于内存中,所以,当我们进入到欢迎页的时候,不要忘了把背景图设置为空:


SplashActivity.java


@Override


protected void onCreate(@Nullable Bundle savedInstanceState) {


//将 window 的背景图设置为空


getWindow().setBackgroundDrawable(null);


super.onCreate(savedInstanceState);


}


到这里,关于 Android 启动页的相关问题就都讲完了。


[点击获取本次项目的 demo](


)




[](


)后记




1,


这篇文章中,关于 Android 启动页的相关原理并没有从 Android framework 层的代码来做出解释,不过以后写到 framework 层的文章时候可能会提及这里。不过我想框架层的代码可能不是大家想关注的重点,因此我认为这篇文章应该是合适的。


2,


近期,我准备从公司离职了,想换个环境。假如小伙伴们有 Android 相关的 offer,跪求大家给我内推一下,坐标:深圳 or 广州,Android 开发两年,Android 原生和 react-native 都能做,偏向原生




[](


)勘误




暂无


[](


)最后




用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
大佬教你如何处理Android启动页黑屏,以及原理解析,android软件开发语言