1. 程式人生 > 其它 >自定義Activity切換動畫

自定義Activity切換動畫

技術標籤:Androidandroidanimation

自定義Activity切換動畫

使用Animation來實現Activity的切換動畫

目錄

預覽

法一:指定某個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:自定義動畫會覆蓋全域性動畫

法二:定義全域性動畫

  1. 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>
  2. 在應用的 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>

原始碼

https://github.com/djzhao627/ActivityTranslateAnim