其實這篇文章是轉至簡書上的大佬的,加上我自己的代碼實踐了下發現可行,于是就分享下
先看效果
介紹:
其實有很多方法都可以實現這種效果,popwindow,Dialog,BottomSheetDialogFragment,BottomSheetDialog等等,如果想實現用手向下滑動頁面消失,可以選擇BottomSheetDialogFragment,BottomSheetDialog來實現,當前登錄頁LoginActivity我是基于Activity實現的,那是不是我們加個進入動畫不就實現了嗎?答案是可以的
主要是overridependingtransition使用
說起動畫,我們先看下overridependingtransition各個參數起到的作用
overridePendingTransition(int enterAnim, int exitAnim)
從參數我們直觀看到enterAnim是針對將要進入的Activity,而exitAnim將要消失的Activity,如果設置0代表不啟用動畫
實現:
1.exit_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="25"android:toYDelta="100%p"android:duration="300"/>
</set>
?2.enter_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="100%p"android:toYDelta="0"android:duration="300"/>
</set>
3.activity
override fun initData() {overridePendingTransition(R.anim.enter_animation,0)}override fun finish() {super.finish()overridePendingTransition(0, R.anim.exit_animation)}
然后運行完會發現,進入會出現黑屏效果,退出無動畫效果!!!???
其實是因為我們給當前棧頂的Activity加了動畫效果,而棧底無動畫效果導致的這種現象
棧底Activity不需要有視差,那我們給棧底Activity加個默認禁止動畫,看看會出現什么效果
4、新建bottom_silent(禁止動畫)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><!-- 棧底Activity加個默認禁止動畫--><translateandroid:duration="300"android:fromYDelta="0"android:toYDelta="0" />
</set>
5.activity修改
override fun initData() {//參數1是進入的activity的動畫,參數2是當前進入activity的下一個棧中的activity的動畫overridePendingTransition(R.anim.enter_animation, R.anim.bottom_silent)}override fun finish() {super.finish()// 設置退出動畫overridePendingTransition(R.anim.bottom_silent, R.anim.exit_animation)}
這樣就行了
其中要注意的是這3個的動畫時間要一致
參考文章:
Activity從下往上彈出視差效果實現 - 簡書