Activity如何取消界面切換的默認動畫

通常啓動一個新的Activity都默認有切換的動畫效果,好比界面從右至左的移動。可是有些時候咱們不須要這個動畫,怎麼辦?操做方法比較麻煩,這裏我推薦其中一種。我這裏是要作啓動頁splash到首頁Home無縫展現,即啓動頁的圖片背景和首頁最上層的懸浮背景圖是如出一轍,用戶會覺得還在啓動頁,我這裏會作些動畫,而後進行開門效果。(首頁會多出2個按鈕,此時就不是啓動頁了) 效果以下: android

這裏寫圖片描述
主要實現思路: 一、須要設置無動畫效果的主題,應用到對應的界面。 二、在啓動頁面界面結束時,須要增長一個方法 overridePendingTransition(0, 0); 在SplashActivity.this.finish();以前。 三、gif中啓動頁面和首頁都是同一個圖片(首頁佈局上面懸浮了啓動頁的圖片,利用window的decorview) 四、在style.xml裏,須要加入下面主題,其中parent="AppTheme"中的父主題是你應用自身的主題,name="Theme"的theme是即將須要使用的。接下來在首頁的android:theme="@style/Theme"設置到你的首頁(即你啓動頁跳轉的下一級頁面)。

<!-- 取消界面轉場動畫使用-->
    <style name="Theme" parent="AppTheme">
        <item name="android:windowAnimationStyle">@style/Animation</item>
    </style>
    <style name="Animation">
        <item name="android:activityOpenEnterAnimation">@null</item>
        <item name="android:activityOpenExitAnimation">@null</item>
        <item name="android:activityCloseEnterAnimation">@null</item>
        <item name="android:activityCloseExitAnimation">@null</item>
        <item name="android:taskOpenEnterAnimation">@null</item>
        <item name="android:taskOpenExitAnimation">@null</item>
        <item name="android:taskCloseEnterAnimation">@null</item>
        <item name="android:taskCloseExitAnimation">@null</item>
        <item name="android:taskToFrontEnterAnimation">@null</item>
        <item name="android:taskToFrontExitAnimation">@null</item>
        <item name="android:taskToBackEnterAnimation">@null</item>
        <item name="android:taskToBackExitAnimation">@null</item>
    </style>
複製代碼

五、若是須要實現gif中效果,防止啓動頁的圖片可能延伸到狀態欄,我這邊加了佔位佈局(高度爲動態獲取的系統狀態欄高度,代碼是在啓動頁獲取高度)。bash

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        int statusBarHeight = getStatusBarHeight();
        PreferencesUtil.putInt(this, PreferenceKey.SETTING, PreferenceKey.STATUS_BAR_HEIGHT,
                statusBarHeight);
        LogUtil.e(statusBarHeight + "");
    }

    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
複製代碼
相關文章
相關標籤/搜索