主要参考 https://www.jianshu.com/p/9b24929cf58e
现在在设计全局主题的时候,可以在application里面全局设置,也可以在activity里面设置,这里优先级高于在application里面的主题设置
场景:
1:通过Theme的windowAnimationStyle属性实现
使用过程用,如果没有设置android:activityOpenExitAnimation和android:activityCloseEnterAnimation这两个A页面的消失动画,就可能会出现短暂的黑屏交互现象;
如果theme设置windowIsTranslucent为true(这种设置为true的方法在某些手势退出手机里面再次返回app会出现界面闪烁问题,本人不建议使用,我使用的就是第一种方法去避免黑屏),则建议继承Animation.Translucen,否则动画可能不生效,如下:
另外一种解决windowIsTranslucent为true的时候,动画效果不生效的方案:
open var activityCloseEnterAnimation: Int = 0
open var activityCloseExitAnimation: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initWindowAnimAttr()
}
@SuppressLint("ResourceType")
private fun initWindowAnimAttr() {
try {
var activityStyle = theme.obtainStyledAttributes(intArrayOf(R.attr.windowAnimationStyle))
val windowAnimationStyleResId = activityStyle.getResourceId(0, 0)
activityStyle.recycle()
activityStyle = theme.obtainStyledAttributes(windowAnimationStyleResId, intArrayOf(R.attr.activityCloseEnterAnimation, R.attr.activityCloseExitAnimation))
activityCloseEnterAnimation = activityStyle.getResourceId(0, 0)
activityCloseExitAnimation = activityStyle.getResourceId(1, 0)
activityStyle.recycle()
} catch (e: Exception) {
}
}
override fun finish() {
super.finish()
isDestroy = true
overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation)
}
anim_bottom_in, anim_no以及anim_bottom_out的动画文件如下
!---anim_bottom_in
!---anim_no
!---anim_bottom_out
2: 通过overridePendingTransition实现效果
在页面B的onCreate方法和finish方法中加入以下代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
overridePendingTransition(R.anim.anim_bottom_in,R.anim.anim_no)
}
//重写finish方法
override fun finish() {
super.finish()
overridePendingTransition(R.anim.anim_no,R.anim.anim_bottom_out)
}