Activity 的切換效果 淡入淡出

前言

本次講的是Activity 的淺入淺出動畫,和自定義切換動畫
1. 安卓系統中,Google 工程師已經爲我們提供了四個Activity 跳轉動畫, 分別是android.R.anim.slide_in_left, android.R.anim.slide_out_right , android.R.anim.fade_in , android.R.anim.fade_out 。
2. 想使用Activity跳轉動畫有兩種方式,一個是代碼方式,另外一個是stytle方式。
(1. 在Activity中 重寫 overridePendingTransition方法 使用overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out); 即可,爲了代碼的複用性,一般可以寫在BaseActivity 中。 也可以直接在跳轉後直接寫overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out); 這樣的話代碼的複用性不是很高,但是很靈活。
(2. 那就是在res–>value–>stytle中來實現 ,並且在Manifest中指定該主題
這裏寫圖片描述

  1. 在此需要自定義進出動畫,可能會用到插值器。常見的插值器有以下三種:
    (1. LinearInterpolator:線性插值器,勻速運動;
    (2. AccelerateDecelerateInterpolator:加速減速插值器,動畫兩頭慢中間快;
    (3.DecelerateInterpolator:減速插值器,動畫越來越慢;

    當然也可以在stytle 中來配置,可以用來統一app進出風格

 <item  <item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>
        <item name="android:windowExitAnimation">@android:anim/slide_out_right</item>

要點

1.
overridePendingTransition(int enterAnim,int exitAnim)

/* * @param enterAnim A resource ID of the animation resource to use for
     * the incoming activity.  Use 0 for no animation.
     * @param exitAnim A resource ID of the animation resource to use for
     * the outgoing activity.  Use 0 for no animation.
     */

官方解釋: 進入的動畫,和退出的動畫
溫馨提示:這個方法必須放在startActivity和finish之後才能調用

實現

使用google 提供的 slide_in_left 和slide_in_right

btnEnter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, TwoMainActivity.class));
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            }
        });
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            }
        });

這裏寫圖片描述

這裏寫圖片描述

使用google 提供的 android.R.anim.fade_in 和android.R.anim.fade_out

 btnEnter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, TwoMainActivity.class));
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            }
        });
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            }
        });

效果
這裏寫圖片描述這裏寫圖片描述

如果兩個動畫合起來是什麼效果呢?

  btnEnter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, TwoMainActivity.class));
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
                overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
            }
        });
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
                overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
            }
        });

效果
這裏寫圖片描述
這裏寫圖片描述

調試完了google 工程師已經給我們提供的,那我們就來自定義動畫吧

在res下新建anim文件夾,在anim 下新建兩個動畫文件 set 是一個動畫集合

第一個fly_in_top.xml

<?xml version="1.0" encoding="utf-8"?>
<!--從上往下的效果-->
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate   android:fromYDelta="-50%p" android:toYDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

第二個fly_in_fly_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<!--從上往下的效果-->
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate   android:fromYDelta="50%p" android:toYDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

代碼中設置

 btnEnter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, TwoMainActivity.class));
                overridePendingTransition(R.anim.fly_in_top,R.anim.fly_in_bottom  );
            }
        });
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();

                overridePendingTransition(R.anim.fly_in_top,R.anim.fly_in_bottom  );
            }

效果

這裏寫圖片描述

這裏寫圖片描述

到這裏 你們可以完全自己定義一個屬於自己的Activity 跳轉動畫了。

發佈了27 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章