抓住人生中的一分一秒,勝過虛度中的一月一年!
先看下效果

背景
現(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ā)愉快,少走彎路