避免黑色闪屏有2种方法,分别为:android
1.为 Theme 设置背景图;app
给人程序启动快的感受,界面先显示背景图,而后再刷新其余界面控件,刷新不一样步。 ide
<style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen"> <item name="android:windowBackground">@drawable/splash_bg</item> </style>
2.为 Theme 设置透明属性。动画
给人程序启动慢的感受,界面会一次性刷出来,刷新同步。spa
<style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen"> <item name="android:windowIsTranslucent">true</item> </style>
上面的2种 Theme 中,为 Theme 设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为 Theme 设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是
这样设置存在的问题:
原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true以后切换动画失效了。
解决方案:code
<style name="AppTheme" parent="AppBaseTheme"> <!-- <item name="android:windowAnimationStyle">@style/Animation.Activity.Style</item> --> <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> </style> <style name="Animation.Activity.Style" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/base_slide_right_in</item> <item name="android:activityOpenExitAnimation">@anim/base_stay_orig</item> <item name="android:activityCloseEnterAnimation">@anim/base_stay_orig</item> <item name="android:activityCloseExitAnimation">@anim/base_slide_right_out</item> <item name="android:taskOpenEnterAnimation">@anim/base_slide_right_in</item> <item name="android:taskOpenExitAnimation">@anim/base_stay_orig</item> <item name="android:taskCloseEnterAnimation">@anim/base_stay_orig</item> <item name="android:taskCloseExitAnimation">@anim/base_slide_right_out</item> <item name="android:taskToFrontEnterAnimation">@anim/base_slide_right_in</item> <item name="android:taskToFrontExitAnimation">@anim/base_stay_orig</item> <item name="android:taskToBackEnterAnimation">@anim/base_stay_orig</item> <item name="android:taskToBackExitAnimation">@anim/base_slide_right_out</item> </style> <style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent"> <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item> <item name="android:windowExitAnimation">@anim/base_slide_right_out</item> </style>
配置style继承的parent为:orm
<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent"> <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item> <item name="android:windowExitAnimation">@anim/base_slide_right_out</item> </style>
而后让apptheme的
android:windowAnimationStyle为上面的style xml
<style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> </style>
若是想在全部的activity切换时候使用该theme,能够配置application,也能够单个单个配置在activity里面。
固然首页退出的时候能够单独配置MainActivity的退出动画和进入动画继承
<style name="Animation.Activity.Translucent.Style.Main" parent="@android:style/Animation.Translucent"> <item name="android:windowExitAnimation">@anim/slide_right_out</item> </style>
MainActivity的退出和进入动画能够引用系统提供的,可是好像在style里面配置引用不了有些系统的anim,
在文件夹sdk\platforms\android-20\data\res下面,activity_open_enter.xml,activity_close_exit.xml能够直接拷贝到项目中,稍作修改便可。单独写一个进入或者退出,而后其它默认。同步