新导航架构中的圆形显示动画

Posted

技术标签:

【中文标题】新导航架构中的圆形显示动画【英文标题】:Circular reveal animation in new Navigation architecture 【发布时间】:2019-11-14 14:53:27 【问题描述】:

我可以通过循环显示动画前往下一个目的地。我唯一的问题是前一个片段消失了,除非我在我的操作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】:

因此,如果您想知道如何保留前一个屏幕并为下一个屏幕制作循环显示动画。我的解决方案是简单地添加一个新片段。我不认为Navigation 组件允许这种类型的动画。早些时候,我做了一个共享元素转换,只要我在两个屏幕之间使用淡入/淡出转换,它就可以正常工作。通过这种方式,我能够在共享元素过渡播放时保留前一个屏幕。我在想Navigation 组件不断替换以下片段。

【讨论】:

以上是关于新导航架构中的圆形显示动画的主要内容,如果未能解决你的问题,请参考以下文章

CSS实现动画特效导航栏

导航架构组件 - 新资源对话框没有导航图的导航资源类型

如何使用导航架构组件查找子片段

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

如何使用新的导航架构组件实现带有 BottomNavigationView 的 ViewPager?

使用导航架构时如何设置“允许重新排序”?