1. 程式人生 > >簡單實現Activity退出時向下滑動退出的效果

簡單實現Activity退出時向下滑動退出的效果


先放圖(順便吐槽一下,ubuntu下想錄制gif還真是麻煩......)

                                      :

只需建立一個transition 動畫來滑出activity就可以了,覆寫要退出的activity的onBackPressed方法

@Override
    public void onBackPressed() {

        contentRoot.animate() //contentRoot是要退出activity的根檢視
            .translationY(Utils.getScreenHeight(this))//動畫效果是activity的根檢視整體向下平移整個螢幕高度,以達到滑動退出的特效
                               //注意,Util類是一個工具類,它提供獲取螢幕高度的方法,實現起來比較簡單,這裡就不貼程式碼了
            .setDuration(300) //動畫持續時間為300毫秒
            .setListener(new AnimatorListenerAdapter() {//一旦向下平移結束,真正退出activity
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        SecondActivity.super.onBackPressed();
                        overridePendingTransition(0, 0);
                    }
                }).start();


    }


注意的是為了能夠讓第二的activity滑動退出是能夠看到前一個Activity的滑動,讓滑動退出效果看起來更逼真,先將SecondActivity設定成半透明。不然的話擴充套件動畫將顯示在預設的視窗背景之上,而不是前一個Activity的view之上。這是因為每個activity的視窗背景都是定義在它所採用的主題中了的。如果我們想讓activity變半透明,我們需要修改SecondActivity繼承的主題樣式,我們只需添上:

    <style name="AppTheme.SecondActivity" parent="AppTheme">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>




注意了,由於第二個activity設定成了半透明,如果SecondActivity的根檢視即contentRoot沒有設定背景的話,會是一種重疊的效果,最好給根檢視contentRoot設定背景作為墊底

android:background="#FFFFFF"


不然可能會有這種效果,前一個MainActivity的Hello World!出現在當前的SecondActivity後面