11.1 问题
应用程序需要自定义Activity切换或Fragment切换时产生的过渡动画。
11.2 解决方案
(API Level 5)
要修改Activity间的过渡动画,可以使用overridePendingTransition()API进行某次切换时的动画,或者在应用程序的主题中声明自定义动画值来进行更多全局设置。要修改Fragment间的过渡动画,可以使用onCreateAnimation()或onCreateAnimator()API方法。
11.3 实现机制
1.Activity
要自定义Activity切换时的过渡动画,可以考虑4种动画:打开一个新Activity时的进入动画和退出动画,以及当前Activity关闭时的进入动画和退出动画。每种动画都会应用到过渡动画中所涉及的两个Activity之一。例如,当打开一个新的Activity时,当前Activity将会运行“打开退出”动画,而新Activity会运行“打开进入”动画。由于这些动画都是同时运行的,因此动画间应该是互补的,否则看起来会不太协调。以下四段代码演示了这4种动画。
res/anim/activity_open_enter.xml
android:fromDegrees="90" android:toDegrees="0"
android:pivotX="0%" android:pivotY="0%"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
android:fromAlpha="0.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
res/anim/activity_open_exit.xml
android:fromDegrees="0" android:toDegrees="-90"
android:pivotX="0%" android:pivotY="0%"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
res/anim/activity_close_enter.xml
android:fromDegrees="-90" android:toDegrees="0"
android:pivotX="0%p" android:pivotY="0%p"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
android:fromAlpha="0.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="500" />
res/anim/activity_close_exit.xml
android:fromDegrees="0" android:toDegrees="90"
android:pivotX="0%p" android:pivotY="0%p"