自定义Activity切换动画
使用Animation来实现Activity的切换动画
预览
![](https://img-blog.csdnimg.cn/20210127174811704.gif)
法一:指定某个Activity的切换动画
-
设置打开新Activity时展示的动画
在调用
startActivity
之后调用overridePendingTransition
findViewById(R.id.btn).setOnClickListener(v -> { startActivity(new Intent(this, MainActivity2.class)); // 下一个activity的进入动画,当前activity的退出动画 overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); });
-
设置关闭当前Activity时展示的动画
在调用finish()的之
super.finish();
后调用overridePendingTransition
@Override public void finish() { super.finish(); // 下一个的进入,自己的退出 overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); }
TIPS:自定义动画会覆盖全局动画
法二:定义全局动画
-
在
res/values/styles.xml
文件中新建style:<style name="CustomActivityAnimation" parent="android:Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> </style>
-
在应用的 Theme(主题) 中应用上面新建的
CustomActivityAnimation
:<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!--其他省略...--> <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> </style>
动画文件
在res/anim
文件夹下面新建动画文件:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0" />
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toXDelta="-100%p" />
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%p"
android:toXDelta="0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toXDelta="100%p" />
</set>