如何解决windowIsTranslucent影响Activityactivity左右切换动画画

android:windowIsTranslucent 引起activity切换动画无效解决方案 -
- ITeye技术网站
博客分类:
在做项目的当中,就碰到了这个问题:启动app的时候,会出现一秒左右的白屏或者黑屏;当然,我们肯定会到网上搜索如何解决这个问题,我在这里写一下,我搜到的方法,好处及缺点。
一、设置windowBackground,给启动页设置这个theme
AndroidManifest.xml
android:name=".activity.FirstActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Start" &
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
styles.xml
&style name="Theme.Start" parent="android:Theme"&
&item name="android:windowBackground"&@drawable/splash_bg&/item&
&item name="android:windowNoTitle"&true&/item&
这个方法的可行之处,当你的app启动页常年不需要更换的时候,推荐使用这种方法, 简单,快捷,而且activity的切换动画也是有效的,但是如果当你的app启动页会不定时更换的时候,这个方法就不行了。
二、设置 android:windowIsTranslucent
&style name="Theme.Start" parent="android:Theme"&
&item name="android:windowNoTitle"&true&/item&
&item name="android:windowIsTranslucent"&true&/item&
&item name="android:windowBackground"&@android:color/transparent&/item&
当设置这个方法之后,app第一个启动页,会按系统默认的动画,打开、退出页面
&style name="Theme.Start" parent="android:Theme"&
&item name="android:windowNoTitle"&true&/item&
&item name="android:windowIsTranslucent"&true&/item&
&item name="android:windowBackground"&@android:color/transparent&/item&
&item name="android:windowAnimationStyle"&@style/AnimationActivity&/item&
不管是否设置android:windowAnimationStyle,他不会按着这个方法来,所以我们可以去掉这一行,那么问题来了,当设置android:windowIsTranslucent后,动画就会失效,怎么办呢,我在网上找了下,也就那么一两种方法,还不是我想要的效果,于是,再思考之后,发现,我直接用代码设置切换也是可行的呀,说做就做,既然失效的是app的启动页,那么我就给启动页设置切换动画。
核心代码:
Intent intent = new Intent(FirstActivity.this, LoginActivity.class);
startActivity(intent);
this.finish();
overridePendingTransition(R.anim.anim_right_in,R.anim.anim_left_out);
给启动页加入overridePendingTransition之后,切换到另一页的动画就出来了。
目前,就已经达到我想要的效果了,点开app,调用系统默认打开动画,进去启动页,延迟两秒,通过overridePendingTransition,自定义动画来切换到下一页。
那么,有的人可能就有疑惑,如果我非要自定义启动页进入的动画呢?
&style name="Theme.Start" parent="android:Theme"&
&item name="android:windowNoTitle"&true&/item&
&item name="android:windowIsTranslucent"&true&/item&
&item name="android:windowBackground"&@android:color/transparent&/item&
&item name="android:windowAnimationStyle"&@style/animation_translucent_translate&/item&
&style name="animation_translucent_translate" parent="@android:style/Animation.Translucent"&
&item name="android:windowEnterAnimation"&@anim/anim_right_in&/item&
&item name="android:windowExitAnimation"&@anim/anim_left_out&/item&
这样就可以达到我们想要的效果,调用自定义开始动画,overridePendingTransition自定义切换动画,android:windowExitAnimation在我的小米3手机上会失效,可以无视他,并不起什么作用。
贴出我自己想要的效果的代码:
AndroidManifest.xml 里面一个设置
android:name=".activity.FirstActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Start" &
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
styles.xml里面有一个主题
&style name="Theme.Start" parent="android:Theme"&
&item name="android:windowNoTitle"&true&/item&
&item name="android:windowIsTranslucent"&true&/item&
&item name="android:windowBackground"&@android:color/transparent&/item&
FirstActivity.java 里面一个方法
Intent intent = new Intent(FirstActivity.this, LoginActivity.class);
startActivity(intent);
this.finish();
overridePendingTransition(R.anim.anim_right_in,R.anim.anim_left_out);
浏览: 2349 次
来自: 常德
加油啊,要多写,慢慢就写的好了转载(12)
添加全局变量
protected int activityCloseEnterAnimation;
protected int activityCloseExitAnimation;
在OnCreate里面添加如下代码:
TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[] {android.R.attr.windowAnimationStyle});
int windowAnimationStyleResId = activityStyle.getResourceId(0, 0);
activityStyle.recycle();
activityStyle = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[] {android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation});
activityCloseEnterAnimation = activityStyle.getResourceId(0, 0);
activityCloseExitAnimation = activityStyle.getResourceId(1, 0);
activityStyle.recycle();
在你的程序finish之前,需要调用如下代码
public void finish() {
super.finish();
overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7296次
排名:千里之外
原创:19篇
转载:13篇
(1)(2)(1)(4)(11)(12)(2)在该项目中遇到开Activity之后,黑屏问题,解决的办法是在网上通过设置发现theme和style特性,可以实现。
/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&
经过这次的改动之后黑色闪屏现象消失了,终于达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了。而且给出了优缺点的分析,我在这里以我的理解对其进行引用。
原来避免黑色闪屏有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&
&!-- 为 Theme 设置透明属性 --&
&style name=&AppTheme& parent=&android:style/Theme.Black.NoTitleBar.Fullscreen&&
&item name=&android:windowIsTranslucent&&true&/item&
上面的2种 Theme 中。为&Theme&设置背景图后程序在启动的时候,会首先显示这张图。避免发生黑屏;为&Theme&设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完毕后才一次性显示出来。以下是两种方式的优缺点:
为&Theme&设置背景图&&&&&&
给人程序启动快的感觉。界面先显示背景图,然后再刷新其它界面控件,刷新不同步。为&Theme&设置透明属性 & &给人程序启动慢的感觉。界面会一次性刷出来,刷新同步。
可是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。临时我也不知道android系统的theme属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这样的问题,只是还好无意间找到了解决的方法
&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 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 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继承的parent为
&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&
然后让apptheme的android:windowAnimationStyle为上面的style
&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&
假设想在全部的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&
MainActivity的退出和进入动画能够引用系统提供的,可是好像在style里面配置引用不了有些系统的anim,
在目录sdk\platforms\android-20\data\res以下,activity_open_enter.xml,activity_close_exit.xml能够直接复制到项目中。改动
单独写一个进入或者退出。然后其他默认。。。。。。。
多动手。測试,假设有错误的地方麻烦留言一起交流,谢谢
机器人:windowAnimationStyle
版权声明:本文博主原创文章,博客,未经同意不得转载。
阅读(...) 评论()5302人阅读
最近没事的时候仿写Google+的布局,遇到了一个问题,想要一个类似网易新闻向左滑动Activity界面可以finish掉Activity,由于向左滑动时,左面会出现黑屏,不好看, 所以在样式中添加了&&item name=&android:windowIsTranslucent&&true&/item&让Activity界面透明, 这样做是可以满足要求, 但是我想要的Activity之间的切换动画却没有了。网上有人说重写Activity中的overridePendingTransition方法就行了, 可是自己重写了, 好像不行, 最后看到系统主题样式中有Animation.Translucent,于是就自定义了该样式, 满足了要求,记录下来。样式如下
&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 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 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&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21239次
排名:千里之外
(1)(1)(2)(4)(2)(1)(1)解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题 - 推酷
解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
之前项目中遇到打开Activity后黑屏的问题,网上找到解决办法是通过设置theme和style属性可以实现。
/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&
经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了,并且给出了优缺点的分析,我在这里以我的理解对其进行引用。
原来避免黑色闪屏有2种方法,分别为:1.为&
设置背景图;2.为&
设置透明属性。显然我采用的是第二种方式,先分别看看这2种方式所引用的代码:
&!-- 为 Theme 设置背景图 --&
&style name=&AppTheme& parent=&android:style/Theme.Black.NoTitleBar.Fullscreen&&
&item name=&android:windowBackground&&@drawable/splash_bg&/item&
&!-- 为 Theme 设置透明属性 --&
&style name=&AppTheme& parent=&android:style/Theme.Black.NoTitleBar.Fullscreen&&
&item name=&android:windowIsTranslucent&&true&/item&
上面的2种 Theme 中,为&
设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;
&设置透明属性,
程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是两种方式的优缺点:
&&&&&& 给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。
&设置透明属性 & &
给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。
但是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。暂时我也不知道android系统的theme属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这种问题,不过还好无意间找到了解决办法
&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 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 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继承的parent为
&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&
然后让apptheme的
android:windowAnimationStyle为上面的style
&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&
如果想在所有的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&
单独写一个进入或者退出,然后其它默认。。。。。。。
多动手,测试,如果有错误的地方麻烦留言一起交流,谢谢
windowAnimationStyle
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 去掉activity切换动画 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信