Android實現(xiàn)從下往上彈出視差效果
先看下效果:

背景
現(xiàn)在很多App設計會存在瀏覽模式,在沒有登錄情況下點擊相關用戶操作會跳轉(zhuǎn)到登錄頁面LoginActivity,登錄頁面跳轉(zhuǎn)常見的為從左向右,從下往上等視差效果,下面就來講講開啟時從下往上跳轉(zhuǎn)的視差如何來實現(xiàn),網(wǎng)上有很多其他案例,有的是將Activity設置Dialog主題,本人不推薦這種,因為Dialog會涉及到屏幕透明主題這個屬性,處理不好可能會出現(xiàn)問題
分析
拋開Activity的束縛,如何可以讓布局從下往上彈出呢?
其實有很多方法都可以實現(xiàn),popwindow,Dialog,BottomSheetDialogFragment,BottomSheetDialog等等,如果想實現(xiàn)用手向下滑動頁面消失,可以選擇BottomSheetDialogFragment,BottomSheetDialog來實現(xiàn),當前登錄頁LoginActivity我是基于Activity實現(xiàn)的,那是不是我們加個進入動畫不就實現(xiàn)了嗎?答案是可以的
1、overridependingtransition使用
說起動畫,我們先看下overridependingtransition各個參數(shù)起到的作用
overridePendingTransition(int enterAnim, int exitAnim)從參數(shù)我們直觀看到enterAnim是針對將要進入的Activity,而exitAnim將要消失的Activity,如果設置0代表不啟用動畫。
2、新建 bottom_in.xml(底部彈入動畫)
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="100%p"android:toYDelta="0"????????android:duration="400"/>set>
3、新建 bottom_out.xml(底部退出動畫)
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="25"android:toYDelta="100%p"????????android:duration="400"/>set>
4、LoginActivity實現(xiàn)動畫效果
@Overrideprotected void onCreate(Bundle savedInstanceState) {overridePendingTransition(R.anim.bottom_in,0);super.onCreate(savedInstanceState);}@Overridepublic void finish() {overridePendingTransition(0,R.anim.bottom_out);super.finish();}
運行完會發(fā)現(xiàn),進入會出現(xiàn)黑屏效果,退出無動畫效果!!!???
其實是因為我們給當前棧頂?shù)腁ctivity加了動畫效果,而棧底無動畫效果導致的這種現(xiàn)象,棧底Activity不需要有視差,那我們給棧底Activity加個默認禁止動畫,看看會出現(xiàn)什么效果
5、新建bottom_silent(禁止動畫)
android:duration="500"android:fromYDelta="0"android:toYDelta="0" />
6、LoginActivity實現(xiàn)動畫效果
@Overrideprotected void onCreate(Bundle savedInstanceState) {overridePendingTransition(R.anim.bottom_in,R.anim.bottom_silent);super.onCreate(savedInstanceState);}@Overridepublic void finish() {super.finish();overridePendingTransition(R.anim.bottom_silent,R.anim.bottom_out);}
運行完效果如上述gif圖片,注:如果禁止動畫時間小于進出動畫時間,還是會出現(xiàn)黑屏效果,大家注意一下。
到這里就結束啦。
