首页 > 解决方案 > 动画在片段之间的过渡动​​画期间剪切片段

问题描述

我有一个 SignInFragment。单击“在此处注册”时,SignUpFragment 将 SignInfragment 替换为幻灯片动画,但 SignIn 被添加到堆栈中,因此当按下返回时,它返回到 SignInFragment 而不是关闭活动。

运行后退动画时出现问题。发生这种情况是因为第一个片段比第二个片段短,但我不知道如何修复它。

以下是有关问题发生方式的分步说明:

SignInFragment:点击“在这里注册”

SignInFragment 和 SignUpFragment 之间的滑动动画工作正常

SignUpFragment:单击后退按钮

SignUpFragment 和 SignInFragment 之间的幻灯片动画无法正常工作

如您所见,SignUpFragment 被剪切以在动画期间修复 SignInFragment 高度,我该如何解决这个问题,以便动画显示较长片段中的所有内容?

“在这里登录”代码:

//Get inflator view to modify it before returning
val signinfragment: View = inflater.inflate(R.layout.fragment_sign_up, container, false)

//Get activity instance that called this fragment
val superActivity = (activity as AppCompatActivity?)!!

//Set 'Sign up here' on click action
signinfragment.tv_sign_up.setOnClickListener {
    //Create fragment transaction to inflate a new fragment that will replace this one
    var transaction = superActivity.supportFragmentManager.beginTransaction()

    //New fragment will be added to back stack so when user clicks back, it will return to
    //this fragment instead of closing activity
    transaction.addToBackStack(null)

    //Set slide animation from this fragment to new one (right slide animation) and from
    //that one to this one (left slide animation) during back action
    transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)

    transaction.replace(R.id.container, SignUpFragment()).commit()
}

动画代码:slide_in_right:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

滑出左:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"

    android:fromXDelta="0"
    android:toXDelta="-100%p" />
</set>

滑入左:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

滑出右:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>

标签: androidkotlinfragmentandroid-animation

解决方案


推荐阅读