Циркулярная анимация в новой навигационной архитектуре - PullRequest
0 голосов
/ 04 июля 2019

Я могу перейти к следующему пункту назначения с анимацией кругового раскрытия.Моя единственная проблема в том, что предыдущий фрагмент пропал, если в моем действии не установлен выходной переход затухания 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()
}

1 Ответ

0 голосов
/ 06 июля 2019

Итак, если вам интересно, как сохранить предыдущий экран и выполнить анимацию циклического отображения для следующего экрана. Моим решением было просто добавить новый фрагмент. Я не думаю, что компонент Navigation позволяет использовать этот тип анимации. Ранее я делал переход с общим элементом, который работал нормально, пока я использовал переход с постепенным исчезновением / исчезновением между двумя экранами. Таким образом, я смог сохранить предыдущий экран во время воспроизведения перехода с общего элемента. Я думаю, что компонент Navigation постоянно заменяет следующий фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...