繁体   English   中英

如何在Android 8(API 26,Oreo)上使用片段过渡

[英]How to use Fragment transition on Android 8 (API 26, Oreo)

我正在使用FragmentManager通过共享元素转换(共享两个元素)将一个片段替换为另一个片段。 这是代码(在Kotlin中):

private fun showList(edited: EditedAlarm) {
    fragmentManager.findFragmentById(R.id.main_fragment_container)?.apply{
        exitTransition = Fade()
    }

    // create a new Fragment and set transitions
    val listFragment = AlarmsListFragment().apply {
        sharedElementEnterTransition = moveTransition()
        enterTransition = Fade()
    }

    fragmentManager.beginTransaction()
            .addSharedElement(viewHolder.digitalClock(), "clock" + viewHolder.alarmId())
            .addSharedElement(viewHolder.container(), "onOff" + viewHolder.alarmId())
            .replace(R.id.main_fragment_container, listFragment)
            .commit()
}

转换本身的定义如下:

    private fun moveTransition(): TransitionSet {
    return TransitionSet().lollipop {
        ordering = TransitionSet.ORDERING_TOGETHER
        addTransition(ChangeBounds())
        addTransition(ChangeTransform())
    }
}

仅在以下情况下,此代码可在我的Moto Z2 Play(Android接近AOSP)和我的Motorola One(Android ONE)上运行。

  • 目标API低于26
  • 或使用支持v4库片段(稍作调整-使用supportFragmentManager)

但是,如果目标API为26或更高版本,则id无法正常工作。 如果将目标API设置为26,则共享元素不会设置为动画 取而代之的是,两个共享元素都跳到了它们的最终位置,而其他所有元素都被动画化了。

不使用支持库怎么办? 我是否缺少一些必须设置的属性?

经过一番研究,并感谢Eugen Pechanec的评论,我得出结论, 使用v4支持库是必经之路 API版本28中不推荐使用平台片段,因此我们迟早必须进行镜像。

我不能说支持库可以完美地工作,但是至少共享元素的过渡是动态的。

我花了很多时间才能在没有图书馆的情况下使之工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM