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

问题描述 投票:1回答:1

我正在使用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,则不会为共享元素设置动画。相反,两个共享元素都跳转到它们的结束位置,而其他所有元素都是动画的。

如何在不使用支持库的情况下使其工作?我错过了一些必须设置的属性吗?

android android-fragments android-animation android-transitions fragmentmanager
1个回答
0
投票

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

我不能说支持库完美无缺,但至少共享元素转换是动画的。

在没有图书馆的情况下,我投入了相当多的时间,无法让它发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.