当前位置: 首页 > news >正文

解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题

原文:http://blog.csdn.net/fancylovejava/article/details/39643449

之前项目中遇到打开Activity后黑屏的问题,网上找到解决办法是通过设置theme和style属性可以实现。

http://www.cnblogs.com/sunzn/p/3407078.html

 

之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页。直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式android:theme="@style/AppTheme" 使用了 Theme.Light 题导致的,Light 样式的 windowBackground、colorBackground、colorForeground 等属性的值均为 light 也就是白色偏亮,所以才会出现白色闪屏。下面是我的 APP 出现白色闪屏时样式引用的代码:

   <style name="AppTheme" parent="android:Theme.Light">

   </style>

简单的修改后,闪屏颜色为黑色,代码如下:

   <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">

   </style>

代码修改后引用的样式为黑色主题,但欢迎页仍然会有黑色闪屏短暂的停留。继续进行修改,设置透明属性为 true,代码如下:

    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowIsTranslucent">true</item>
    </style>

经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了,并且给出了优缺点的分析,我在这里以我的理解对其进行引用。

原来避免黑色闪屏有2种方法,分别为:1.为 Theme 设置背景图;2.为 Theme 设置透明属性。显然我采用的是第二种方式,先分别看看这2种方式所引用的代码:

    <!-- 为 Theme 设置背景图 -->
    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowBackground">@drawable/splash_bg</item>
    </style>
    <!-- 为 Theme 设置透明属性 -->
    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowIsTranslucent">true</item>
    </style>

上面的2种 Theme 中,为 Theme 设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为 Theme 设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是两种方式的优缺点:

  • 为 Theme 设置背景图       给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。
  • 为 Theme 设置透明属性    给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。

 

但是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。暂时我也不知道android系统的theme属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这种问题,不过还好无意间找到了解决办法

 

[html]  view plain  copy
 
  1. <style name="AppTheme" parent="AppBaseTheme">  
  2.   
  3.         <!-- <item name="android:windowAnimationStyle">@style/Animation.Activity.Style</item> -->  
  4.         <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>  
  5.         <item name="android:windowBackground">@android:color/transparent</item>  
  6.         <item name="android:windowIsTranslucent">true</item>  
  7.     </style>  
  8.   
  9.     <style name="Animation.Activity.Style" parent="@android:style/Animation.Activity">  
  10.         <item name="android:activityOpenEnterAnimation">@anim/base_slide_right_in</item>  
  11.         <item name="android:activityOpenExitAnimation">@anim/base_stay_orig</item>  
  12.         <item name="android:activityCloseEnterAnimation">@anim/base_stay_orig</item>  
  13.         <item name="android:activityCloseExitAnimation">@anim/base_slide_right_out</item>  
  14.         <item name="android:taskOpenEnterAnimation">@anim/base_slide_right_in</item>  
  15.         <item name="android:taskOpenExitAnimation">@anim/base_stay_orig</item>  
  16.         <item name="android:taskCloseEnterAnimation">@anim/base_stay_orig</item>  
  17.         <item name="android:taskCloseExitAnimation">@anim/base_slide_right_out</item>  
  18.         <item name="android:taskToFrontEnterAnimation">@anim/base_slide_right_in</item>  
  19.         <item name="android:taskToFrontExitAnimation">@anim/base_stay_orig</item>  
  20.         <item name="android:taskToBackEnterAnimation">@anim/base_stay_orig</item>  
  21.         <item name="android:taskToBackExitAnimation">@anim/base_slide_right_out</item>  
  22.     </style>  
  23.   
  24.     <style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">  
  25.         <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>  
  26.         <item name="android:windowExitAnimation">@anim/base_slide_right_out</item>  
  27.     </style>  


配置style继承的parent为

 

 

[html]  view plain  copy
 
  1. <style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">  
  2.         <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>  
  3.         <item name="android:windowExitAnimation">@anim/base_slide_right_out</item>  
  4.     </style>  


然后让apptheme的

[html]  view plain  copy
 
  1. android:windowAnimationStyle为上面的style  

 

 

[html]  view plain  copy
 
  1. <style name="AppTheme" parent="AppBaseTheme">  
  2.   
  3.         <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>  
  4.         <item name="android:windowBackground">@android:color/transparent</item>  
  5.         <item name="android:windowIsTranslucent">true</item>  
  6.     </style>  


如果想在所有的activity切换时候使用该theme,可以配置application,也可以单个单个配置在activity里面。

 

当然首页退出的时候可以单独配置MainActivity的退出动画和进入动画

 

[html]  view plain  copy
 
  1. <style name="Animation.Activity.Translucent.Style.Main" parent="@android:style/Animation.Translucent">  
  2.         <item name="android:windowExitAnimation">@anim/slide_right_out</item>  
  3.     </style>  

 

MainActivity的退出和进入动画可以引用系统提供的,但是好像在style里面配置引用不了有些系统的anim,

在文件夹sdk\platforms\android-20\data\res下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷贝到项目中,修改

单独写一个进入或者退出,然后其它默认。。。。。。。

 

多动手,测试,如果有错误的地方麻烦留言一起交流,谢谢

相关文章:

  • UWP Popup 弹出提示框
  • 利用Dawn工程化工具实践MobX数据流管理方案
  • crontab_定时执行任务(python)
  • 【commons-io】File对文件与目录的处理FileUtis,IOUtils,FilenameUtils工具的使用
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • vue2组件之间双向数据绑定问题
  • IO(字节流、字符流)
  • Linux环境安装docker
  • 康复者的福音来了,只要穿上这款机器人外骨骼便能自由转身
  • Linux系统的数据写入机制--延迟写入
  • 它改变了整个扫地机器人行业,如今被全面收购
  • Day16 Django
  • Paros proxy:网页程序漏洞评估代理
  • HTML 5 Web 存储-sessionStorage和localStorage
  • 使用Prometheus监控Cloudflare的全球网络
  • Apache Zeppelin在Apache Trafodion上的可视化
  • js面向对象
  • Next.js之基础概念(二)
  • PAT A1017 优先队列
  • php面试题 汇集2
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Sublime Text 2/3 绑定Eclipse快捷键
  • tab.js分享及浏览器兼容性问题汇总
  • 阿里云购买磁盘后挂载
  • 从伪并行的 Python 多线程说起
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 力扣(LeetCode)22
  • 码农张的Bug人生 - 见面之礼
  • 嵌入式文件系统
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #AngularJS#$sce.trustAsResourceUrl
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #微信小程序:微信小程序常见的配置传值
  • (2)STM32单片机上位机
  • (2.2w字)前端单元测试之Jest详解篇
  • (C++20) consteval立即函数
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (多级缓存)缓存同步
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转载)PyTorch代码规范最佳实践和样式指南
  • *上位机的定义
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net下的富文本编辑器FCKeditor的配置方法
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Angular] 笔记 20:NgContent
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BJDCTF2020]The mystery of ip