一、起因
最近在模仿某X讯的一个应用,需要设置Activity之间切换的动画,按照之前的文章设置之后居然没有效果还是默认的切换动画,Activity动画和5.0之后的动画都无效,当然设置Window动画和使用overridePendingTransition方法有效的,但只能设置windowEnterTransition和windowExitTransition以及overridePendingTransition(R.anim.slide_in_left,R.anim.slide_in_left)
反复多次,检查动画文件,修改基类,更换启动方法,然并卵,心中真是一万只。。。。没办法,水笔只能硬着头皮干:百度,Google ,简书,掘金,CSDN,就差磕头了,幸好最后解决了。妈蛋,就当再熟悉了一遍转场动画吧。
先来个篇文章压压惊 Activity过渡动画的实现方法
二、原因及解决方法
实话说,虽然是个水笔但是向来还是鄙视百度的,然而讽刺的是今天的问题还真是百度解决的,证据如下:
安卓设置Activity切换动画无效的问题
之后检查自己的manifest.xml果然-----
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activity在Manifest中设置了singleInstance属性:单利模式,是加强本的singleTask,除了singleTask的特点外,还有自己独特的一点就是此模式的Activity只能单独的位于一个任务栈中。A启动后独自一人在一个任务栈中,由于栈内复用的特性,后续都不会创建新的A,直到被系统销毁。换句人话就是Activity处于已经实例化的状态,不会再被实例化,于是Activity动画不会播放,只有Window动画会播放;
然鹅:singleTop:栈顶复用!A启动B,A不再位于栈顶,B返回A时候,就会创建新的实例A,然后动画就可以执行了呀。