首页 > 解决方案 > 使用 TransitionSet 与 android 导航库进行进入/退出转换

问题描述

我想TransitionSet与 Android Navigation Library 结合使用,以存档比在导航图中findNavController().navigate(action)使用更复杂的动画app:enterAnim

为了存档这个我试图覆盖片段的 onCreate 中的进入和退出转换

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    enterTransition = getEnterTransitionSet()
    exitTransition = getExitTransitionSet()
    allowEnterTransitionOverlap = false
}

 private fun getEnterTransitionSet(): TransitionSet {
    return TransitionSet()
        .addTransition(Fade(Fade.MODE_IN)
            .addTarget(R.id.button)
            .setDuration(TRANSITION_DURATION)
        )
        .addTransition(Slide(Gravity.BOTTOM)
            .addTarget(R.id.text)
            .setDuration(TRANSITION_DURATION)
        ).setOrdering(ORDERING_TOGETHER)
}

private fun getExitTransitionSet(): TransitionSet {
    return TransitionSet()
        .addTransition(Fade(Fade.MODE_OUT)
            .addTarget(R.id.buttom)
            .setDuration(TRANSITION_DURATION)
        )
        .addTransition(Slide(Gravity.TOP)
            .addTarget(R.id.text)
            .setDuration(TRANSITION_DURATION)
        ).setOrdering(ORDERING_TOGETHER)
}

文本应该从底部滑入并滑出到顶部,而按钮应该淡入或淡出。

为了测试这一点,我创建了一个循环并在单击按钮时再次导航到同一个片段,但是输入动画永远不会执行,并且新片段在旧片段之上膨胀。之后执行旧片段的退出转换。

我的期望是类似于app:enterAnimand的行为app:exitAnim。并在前一个片段的退出过渡之后执行新片段的进入过渡。我错过了什么或者这不可能吗?

标签: androidandroid-fragmentsandroid-animationandroid-jetpack-navigation

解决方案


推荐阅读