直接貼代碼吧
1. 動畫文件(兩個動畫文件配置到res/anim目錄下)
activity_anim_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:fromXDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0" />
</set>
activity_anim_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:fromXDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="100%p" />
</set>
2.將兩個資源文件配置到style文件中的
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- 設置activity切換動畫 -->
<item name="android:windowAnimationStyle">@style/activityAnimation</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="activityAnimation" parent="@android:style/Animation">
<item name="android:activityOpenEnterAnimation">@anim/activity_anim_in_right</item>
<item name="android:activityCloseExitAnimation">@anim/activity_anim_out_left</item>
</style>
3.配置的到Application的android:theme="@style/AppTheme"
注:系統動畫 < AppTheme < (overridePendingTransition\ActivityOptionsCompat))
如果出現沒有動畫,或動畫與設置不一致
原因:當頁面切換時需要進入和消失兩個動畫,當沒有進入動畫時,消失動畫也不會執行,會執行系統動畫,如果沒有系統動畫則沒有動畫,或者某個頁面使用第一或第二種方式設置了動畫(動畫執行優先級,系統動畫 < AppTheme < (overridePendingTransition\ActivityOptionsCompat))。
解決方法:為了保證進入和消失都有動畫,要將動畫主題設置到兩個Activity上。也可以將主題設置到application上,這樣整個應用都是用該切換動畫。如果是某個頁面使用第一或第二種方式設置了動畫,那么在啟動和退出時最好都要設置,不然會造成啟動和退出不一致的情況。
總結:
第一種方式:靈活可以隨意控進入消失動畫,但是實現不方便。
第二種方式:與第一種方式類似,但是該種方式為我們提供了多種特殊動畫。
第三種方式:使用方便,只需要配置主題,不需要添加過多代碼,但是不夠靈活
建議:
定義一種動畫主題,並設置到application上,將整個應用的切換動畫統一,如果某個頁面有特殊要求,再根據不用需求使用第一或第二種類型單獨處理。
希望可以幫助到你,加油⛽️!