其实这篇文章是转至简书上的大佬的,加上我自己的代码实践了下发现可行,于是就分享下
先看效果
介绍:
其实有很多方法都可以实现这种效果,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">
<translate
android: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">
<translate
android: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加个默认禁止动画-->
<translate
android: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个的动画时间要一致
参考文章: