Android activity动画无效问题汇总
概述
android activity动画是一个比较简单的功能。
但是使用时总会由于各种小问题导致动画失效,笔者根据自己经验,整理了各种可能导致的原因,期望能对你有所帮助。
activity动画方式
- 在AndroidMenifest中添加activity的动画属性windowAnimationStyle
<item name="android:windowAnimationStyle">@style/anim_fade</item>
- 在activity代码中添加 overridePendingTransition
overridePendingTransition(int enterAnim,int exitAnim)
问题汇总
- 一、动画写的有问题
- 二、activity theme中设置动画为null,或者parent theme设置动画为null
- 三、overridePendingTransition 使用时机问题
- 四、overridePendingTransition 写错地方
- 五、onPause与onResume中的overridePendingTransition会覆盖其他位置
- 六、透明度影响动画
- 七、插件化问题导致找不到动画
一、动画写的有问题
动画本身出问题的方式无法一一列举,常见的有“duration设置为0”,“from与to的值设置相同”。
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromAlpha="0.0" android:toAlpha="0.0"android:duration="300" />
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromAlpha="0.0" android:toAlpha="1.0"android:duration="0" />
二、activity theme中设置动画为null,或者parent theme设置动画为null
如下:
<style name="TestActivityTheme"><item name="android:windowNoTitle">true</item><item name="android:windowIsTranslucent">true</item><item name="android:windowAnimationStyle">@null</item></style>
<style name="TestActivityTheme" parent="ParentActivityTheme"></style><style name="ParentActivityTheme"><item name="android:windowNoTitle">true</item><item name="android:windowIsTranslucent">true</item><item name="android:windowAnimationStyle">@null</item></style>
三、overridePendingTransition 使用时机问题
overridePendingTransition 源码注释如下:
Call immediately after one of the flavors of startActivity(Intent) or finish to specify an explicit transition animation to perform next.
As of Build.VERSION_CODES.JELLY_BEAN an alternative to using this with starting activities is to supply the desired animation information through a ActivityOptions bundle to startActivity(Intent, Bundle) or a related function. This allows you to specify a custom animation even when starting an activity from outside the context of the current top activity.
Params:
enterAnim – A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
exitAnim – A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.
其中说了两个overridePendingTransition 的使用时机:
- 在startActivity 之后
- 在finish之后
如下:
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
四、overridePendingTransition 写错地方
写错地方就纯属是开发者的粗心,例子如下:
重写了finish方法,但是调用的是finishAndRemoveTask
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();finishAndRemoveTask();}@Overridepublic void finish() {super.finish();overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);}
五、onPause与onResume中的overridePendingTransition会覆盖其他位置
根据笔者经验,onPause和onResume中如果写了overridePendingTransition,那么其效果会覆盖其他地方设置的动画。
比如你在finish的时候设置了overridePendingTransition,然后在onPause中也设置了overridePendingTransition,那么最终效果会以onPause中的。
比如下面的例子中,finish之后设置了动画,onPause中关闭了activity的动画,那么最终就是没有动画。
@Overrideprotected void onPause() {super.onPause();overridePendingTransition(0,0)}@Overridepublic void finish() {super.finish();overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);}
六、透明度影响动画
比如页面本身就是透明的情况下,还设置透明度动画,那么就会看上去无效。
七、插件化问题导致找不到动画
如果动画资源找不到,都会引起动画失效的问题。
插件化的场景中,比较特殊的地方是:
有些插件化框架加载动画资源,需要使用其框架对应的API来操作。
原因是:插件化框架一般都会更改资源的id,通过固定的API才能够找到对应的资源。
在部分插件化框架中,如果直接调用overridePendingTransition来加载动画,会无法找到动画资源,并且Android Studio也不会报错。
比如下面代码,直接在插件中调用就可能会找不到资源,并且Android Studio也不会报错。
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Android activity动画无效问题汇总相关推荐
- Android Activity动画属性简介
Android Activity动画属性简介 在Android当中 设置activity的动画 需要复写 android:windowAnimationStyle这个属性 我们自定义一个动画样式来继承 ...
- android系统换动画,Android Activity动画跳转修改
在网上看了许多关于如何去掉Activity动画的blog,我觉得说的仍然不够清晰. 所以我在这边简单画图说明一下:如何去掉或替换系统的默认动画 改变动画的方式 1.在Activity中调用 overr ...
- android淡入淡出动画循环,Android activity动画(淡入淡出)
今天记录下Activity一个淡入淡出的切换效果 大概效果就是去除了activity的切换动画,感觉很简洁,个人比较喜欢这个效果 直接上效果: video2gif_20190222_175450.gi ...
- Xamarin.android Activity动画切换效果实现
http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources--values下新建styles.xml,添加内容如下 ...
- android 动画失效,Activity退出动画无效的解决方案
许多手机的Activity的退出动画失效了,即使调用finish()后执行如下代码也没有用overridePendingTransition(R.anim.activity_open_in_anim, ...
- Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整
2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...
- android activity切换动画
今天,实在没有什么可以写的内容,在网上找了好久,才决定写今天的内容.自己还是想保持每天写博客的习惯. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左 ...
- 安卓设置Activity切换动画无效的问题
做安卓App时,常会设置Activity之间切换的动画.常用的方法有两种,一种是用Activity的overridePendingTransition方法:另一种是用style文件通过xml进行设置. ...
- android 动画方式,Android Activity进出动画三种方法
Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 android:fromYDelta ...
最新文章
- 信息系统项目管理师-案例分析专题(一)案例简介、答题方法、要点笔记
- ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)
- python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算
- sqlite可视化工具推荐
- java selenium_关于selenium的介绍
- Linux教程:10条秘诀确保Linux桌面安全性
- 自从微信更新后,广东人都玩疯了!以后语音可以识别英语、粤语啦!
- 中琛源主要的产品是什么
- 计算机专业英语第三章ppt,计算机专业英语第三章.ppt
- 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
- xbox one 手柄按键测试软件,Xbox One手柄映射工具(ReWASD)
- (附源码)springboot 学生选课系统 毕业设计 612555
- 九宫格拼图小游戏代码html,js实现九宫格拼图小游戏.pdf
- 纯代码实现WordPress文章部分内容关注微信公众号后可见
- Unity3D之协程(Coroutines Yield )
- bpm java_bpm完全解读
- 百度大脑UNIT升级,五步完成对话模型私有化部署
- vs 无法启动程序c语言,vs2013运行c语言出现:无法查找或打开 PDB 文件。
- 单曲循环:一人一wifi
- 浅谈MQTT底层原理(网络调试助手直连阿里云)
热门文章
- 太惊艳了,这些都是css的杰作
- pink老师作业 简易计算器
- 黑猴子的家:Redis 薪火相传
- 计算机网络基础实验,计算机网络基础实验报告
- MySQL启动报错1067(附排查解决方法)
- C. Lucky Tickets
- python coroutine_python coroutine的学习跟总结[转]
- NIO - 基础入门之通道和缓冲区
- As second twin awaits kidney donor, rural Washington family can only wait
- 实战教程|使用知晓云快速制作一个简单的个人博客