Activity從下往上彈出視差效果實(shí)現(xiàn)

抓住人生中的一分一秒,勝過虛度中的一月一年!

先看下效果
login.gif
背景

現(xiàn)在很多App設(shè)計(jì)會(huì)存在瀏覽模式,在沒有登錄情況下點(diǎn)擊相關(guān)用戶操作會(huì)跳轉(zhuǎn)到登錄頁面LoginActivity,登錄頁面跳轉(zhuǎn)常見的為從左向右,從下往上等視差效果,下面就來講講開啟時(shí)從下往上跳轉(zhuǎn)的視差如何來實(shí)現(xiàn),網(wǎng)上有很多其他案例,有的是將Activity設(shè)置Dialog主題,本人不推薦這種,因?yàn)镈ialog會(huì)涉及到屏幕透明主題這個(gè)屬性,處理不好可能會(huì)出現(xiàn)問題

分析

拋開Activity的束縛,如何可以讓布局從下往上彈出呢?其實(shí)有很多方法都可以實(shí)現(xiàn),popwindow,Dialog,BottomSheetDialogFragment,BottomSheetDialog等等,如果想實(shí)現(xiàn)用手向下滑動(dòng)頁面消失,可以選擇BottomSheetDialogFragment,BottomSheetDialog來實(shí)現(xiàn),當(dāng)前登錄頁LoginActivity我是基于Activity實(shí)現(xiàn)的,那是不是我們加個(gè)進(jìn)入動(dòng)畫不就實(shí)現(xiàn)了嗎?答案是可以的

1、overridependingtransition使用

說起動(dòng)畫,我們先看下overridependingtransition各個(gè)參數(shù)起到的作用
overridePendingTransition(int enterAnim, int exitAnim)
從參數(shù)我們直觀看到enterAnim是針對(duì)將要進(jìn)入的Activity,而exitAnim將要消失的Activity,如果設(shè)置0代表不啟用動(dòng)畫

2、新建 bottom_in.xml(底部彈入動(dòng)畫)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="100%p"
        android:toYDelta="0"
        android:duration="400"
        />
</set>
3、新建 bottom_out.xml(底部退出動(dòng)畫)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="25"
        android:toYDelta="100%p"
        android:duration="400"
        />
</set>
4、LoginActivity實(shí)現(xiàn)動(dòng)畫效果
@Override
    protected void onCreate(Bundle savedInstanceState) {
        overridePendingTransition(R.anim.bottom_in,0);
        super.onCreate(savedInstanceState);
    }
    @Override
    public void finish() {
        overridePendingTransition(0,R.anim.bottom_out);
        super.finish();
    }

運(yùn)行完會(huì)發(fā)現(xiàn),進(jìn)入會(huì)出現(xiàn)黑屏效果,退出無動(dòng)畫效果!?。????
其實(shí)是因?yàn)槲覀兘o當(dāng)前棧頂?shù)腁ctivity加了動(dòng)畫效果,而棧底無動(dòng)畫效果導(dǎo)致的這種現(xiàn)象
棧底Activity不需要有視差,那我們給棧底Activity加個(gè)默認(rèn)禁止動(dòng)畫,看看會(huì)出現(xiàn)什么效果

5、新建bottom_silent(禁止動(dòng)畫)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromYDelta="0"
        android:toYDelta="0" />
</set>
6、LoginActivity實(shí)現(xiàn)動(dòng)畫效果
@Override
    protected void onCreate(Bundle savedInstanceState) {
        overridePendingTransition(R.anim.bottom_in,R.anim.bottom_silent);
        super.onCreate(savedInstanceState);
    }
    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.bottom_silent,R.anim.bottom_out);
    }

運(yùn)行完效果如上述gif圖片,注:如果禁止動(dòng)畫時(shí)間小于進(jìn)出動(dòng)畫時(shí)間,還是會(huì)出現(xiàn)黑屏效果,大家注意一下

最后,祝大家開發(fā)愉快,少走彎路

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容