簡體   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