我可以使用圆形揭示动画前往下一个目的地。我唯一的问题是上一个片段消失了,除非我在 Action app:exitAnim="@anim/exit_fade_out"中设置了淡出退出过渡。我想问一问,在进行循环展示时是否有人能够保持先前的片段可见。

这是用于显示和隐藏新片段的代码。.到目前为止,它仍然有效,但是我无法显示前一个片段作为其掩盖下一个片段的方式。

private val maxScreenDimension : Float
get() {
    return max(container.width, container.height).toFloat()
}

private fun circularReveal(point: Point) {
    val viewTreeObserver = container.viewTreeObserver
    if (viewTreeObserver.isAlive) {
        viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                doCircularReveal(point)
                container.viewTreeObserver.removeOnGlobalLayoutListener(this)
            }
        })
    }
}

private fun doCircularReveal(point: Point) {
    val initRadius = 0f
    val finalRadius = maxScreenDimension

    val circularReveal = ViewAnimationUtils.createCircularReveal(
        container,
        point.x,
        point.y,
        initRadius,
        finalRadius
    )

    circularReveal.duration = resources.getInteger(R.integer.circular_animation_out).toLong()

    circularReveal.start()
}

private fun circularHide(point: Point) {
    val initRadius = maxScreenDimension
    val finalRadius = 0f

    val circularReveal = ViewAnimationUtils.createCircularReveal(
        container,
        point.x,
        point.y,
        initRadius,
        finalRadius
    )

    circularReveal.duration = resources.getInteger(R.integer.circular_animation_in).toLong()
    circularReveal.doOnEnd {
        container.isVisible = false
        findNavController().popBackStack()
    }

    circularReveal.start()
}

最佳答案

因此,以防万一您想知道如何保留上一个屏幕并为下一个屏幕做循环显示动画。我的解决方案是简单地添加一个新片段。我认为Navigation组件不支持此类动画。早些时候,我做了一个共享元素过渡,只要我在两个屏幕之间使用淡入/淡出过渡,效果就很好。这样,在共享元素过渡播放时,我可以保留上一个屏幕。我认为Navigation组件正在不断替换以下片段。

08-05 18:57