Android动画
有关于Android动画基础知识的理解及笔记记录
1. windowAnimation和ActivityAnimation的区别
包含内容
windowAnimation包括:
1 2
windowEnterAnimation windowExitAnimation
ActivityAnimation包含:
1 2 3 4
android:activityOpenEnterAnimation android:activityOpenExitAnimation android:activityCloseEnterAnimation android:activityCloseExitAnimation
- 当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
- 当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
- 当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
- 当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation
ActivityAnimation更为复杂,但这种复杂带来的转场效果非常好,可以同时控制2个Activity的动画,而不像WindowAnimation只能控制下一个Activity的窗体动画。
项目中WindowAnimation的控制权大于Activity的控制权。Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么 可能(因为这种情况非常多) 只会执行WindowAnimation
WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation Style即可;而ActivityAnimation,需要继承Animation Activity Style
窗体动画也可以使用 Activity.overridePendingTransition来设置,也可以定义在主题中,但Activity只能使用在主题中
2. Transition动画的使用
- 概念
Trasition 内部保存了所有关于动画的信息,当场景变换时动画将在目标对象上执行。Transition基于两个概念:场景(scenes)和变换(transitions),场景是UI当前状态,变换则定义了在不同场景之间动画变化的过程。
分为以下几种:
- enter:用于决定第一次打开当前Activity时的动画
- exit : 用于决定退出当前Activity时的动画
- reenter: 用于决定如果当前Activity已经打开过,并且再次打开该Activity时的动画
- shared elements:用于决定在两个Activity之间切换时,指定两个Activity中对应的View的过渡效果
- 如何使用
可以通过代码也可以通过设置主题
代码方式,在setContentView之前调用:
|
|
主题xml方式:
|
|
Activity中设置进入,退出Transition动画,Material主题默认会将exit的transition设置成null而enter的transition设置成Fade ,如果reenter 或者 return transition没有明确设置,则将用exit 和enter的transition替代。
开始一个activity的content transition需要调用startActivity(Context, Bundle)方法,Bundle参数生成方法ActivityOptions.makeSceneTransitionAnimation(activity, pairs).toBundle();
在代码中触发通过finishAfterTransition()方法触发返回动画,而不是调用finish()方法。