概述

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 的使用时机:

  1. 在startActivity 之后
  2. 在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动画无效问题汇总相关推荐

  1. Android Activity动画属性简介

    Android Activity动画属性简介 在Android当中 设置activity的动画 需要复写 android:windowAnimationStyle这个属性 我们自定义一个动画样式来继承 ...

  2. android系统换动画,Android Activity动画跳转修改

    在网上看了许多关于如何去掉Activity动画的blog,我觉得说的仍然不够清晰. 所以我在这边简单画图说明一下:如何去掉或替换系统的默认动画 改变动画的方式 1.在Activity中调用 overr ...

  3. android淡入淡出动画循环,Android activity动画(淡入淡出)

    今天记录下Activity一个淡入淡出的切换效果 大概效果就是去除了activity的切换动画,感觉很简洁,个人比较喜欢这个效果 直接上效果: video2gif_20190222_175450.gi ...

  4. Xamarin.android Activity动画切换效果实现

    http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources--values下新建styles.xml,添加内容如下 ...

  5. android 动画失效,Activity退出动画无效的解决方案

    许多手机的Activity的退出动画失效了,即使调用finish()后执行如下代码也没有用overridePendingTransition(R.anim.activity_open_in_anim, ...

  6. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

    2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...

  7. android activity切换动画

    今天,实在没有什么可以写的内容,在网上找了好久,才决定写今天的内容.自己还是想保持每天写博客的习惯. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左 ...

  8. 安卓设置Activity切换动画无效的问题

    做安卓App时,常会设置Activity之间切换的动画.常用的方法有两种,一种是用Activity的overridePendingTransition方法:另一种是用style文件通过xml进行设置. ...

  9. android 动画方式,Android Activity进出动画三种方法

    Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 android:fromYDelta ...

最新文章

  1. 信息系统项目管理师-案例分析专题(一)案例简介、答题方法、要点笔记
  2. ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)
  3. python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算
  4. sqlite可视化工具推荐
  5. java selenium_关于selenium的介绍
  6. Linux教程:10条秘诀确保Linux桌面安全性
  7. 自从微信更新后,广东人都玩疯了!以后语音可以识别英语、粤语啦!
  8. 中琛源主要的产品是什么
  9. 计算机专业英语第三章ppt,计算机专业英语第三章.ppt
  10. 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
  11. xbox one 手柄按键测试软件,Xbox One手柄映射工具(ReWASD)
  12. (附源码)springboot 学生选课系统 毕业设计 612555
  13. 九宫格拼图小游戏代码html,js实现九宫格拼图小游戏.pdf
  14. 纯代码实现WordPress文章部分内容关注微信公众号后可见
  15. Unity3D之协程(Coroutines Yield )
  16. bpm java_bpm完全解读
  17. 百度大脑UNIT升级,五步完成对话模型私有化部署
  18. vs 无法启动程序c语言,vs2013运行c语言出现:无法查找或打开 PDB 文件。
  19. 单曲循环:一人一wifi
  20. 浅谈MQTT底层原理(网络调试助手直连阿里云)

热门文章

  1. 太惊艳了,这些都是css的杰作
  2. pink老师作业 简易计算器
  3. 黑猴子的家:Redis 薪火相传
  4. 计算机网络基础实验,计算机网络基础实验报告
  5. MySQL启动报错1067(附排查解决方法)
  6. C. Lucky Tickets
  7. python coroutine_python coroutine的学习跟总结[转]
  8. NIO - 基础入门之通道和缓冲区
  9. As second twin awaits kidney donor, rural Washington family can only wait
  10. 实战教程|使用知晓云快速制作一个简单的个人博客