其实这篇文章是转至简书上的大佬的,加上我自己的代码实践了下发现可行,于是就分享下
先看效果
介绍:
其实有很多方法都可以实现这种效果,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从下往上弹出视差效果实现 - 简书