Activity切换动画有5种实现方式,在实现Activity切换动画之前,先来说明一下Activity切换的两种方式:
- 调用startActivity方法启动一个新的Activity并跳转其页面
- 调用finish方法销毁当前的Activity返回上一个Activity界面
【方法一】
使用 overridePendingTransition 方法实现 Activity 跳转动画
-
当从A界面跳转到B界面时:
Intent intent = new Intent(MainActivity.this, MainActivity2.class); startActivity(intent); overridePendingTransition(R.anim.jump_enter_anim, R.anim.jump_exit_anim);
在startActivity
下面立即执行overridePendingTransition
方法,第一个参数为B界面的入场动画,第二个参数是A界面的出场动画。
动画代码如下:
jump_enter_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<translate
android:fromXDelta="100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0" />
</set>
jump_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<translate
android:fromXDelta="0"
android:toXDelta="-100%p"
android:fromYDelta="0"
android:toYDelta="0" />
</set>
效果如下:
- 当finish掉B界面(相当于从B界面跳转到A界面)
finish();
overridePendingTransition(R.anim.finish_enter_anim, R.anim.finish_exit_anim);
在finish
下面立即执行overridePendingTransition
方法,第一个参数为A界面的入场动画,第二个参数是B界面的出场动画。
动画代码如下:
finish_enter_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<translate
android:fromXDelta="-100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0" />
</set>
finish_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<translate
android:fromXDelta="0"
android:toXDelta="100%p"
android:fromYDelta="0"
android:toYDelta="0" />
</set>
效果如下:
当然,以上动画仅仅是位移动画,除了位移动画,还可以加上缩放、旋转、透明度的组合动画。(这个在第一篇的补间动画就说过了)
【方法二】
使用 style 的方式定义 Activity 的切换动画
【方法一】虽然可以实现Activity的切换效果,但是往往一个项目中会有多个startActivity
和finish
代码,难道都必须要在它们之后执行overridePendingTransition
代码吗?
答案是否定的,我们可以在主题样式里面设置统一的切换动画。 代码如下:
Application的主题样式如下:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/activityAnim</item>
</style>
其中,windowAnimationStyle就是设置Activity切换动画。
其余代码如下:
<!-- 使用style方式定义activity切换动画 -->
<style name="activityAnim">
<item name="android:activityOpenEnterAnimation">@anim/jump_enter_anim</item>
<item name="android:activityOpenExitAnimation">@anim/jump_exit_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/finish_enter_anim</item>
<item name="android:activityCloseExitAnimation">@anim/finish_exit_anim</item>
</style>
以上四个动画文件的代码和【方法一】一样。
【方法三】
使用 ActivityOptions 切换动画实现 Activity 跳转动画
【方法四】
使用 ActivityOptions 之后内置的动画效果通过 style 的方式
【方法五】
使用 ActivityOptions 动画共享组件的方式实现跳转 Activity 动画
【方法三】
、【方法四】
、 【方法五】
为下一篇的内容,使用ActivityOptions实现UI之间的转场动画(不仅仅是Activity的切换动画)
。
[本章完...]