[英]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或更高版本,則id無法正常工作。 如果將目標API設置為26,則共享元素不會設置為動畫 。 取而代之的是,兩個共享元素都跳到了它們的最終位置,而其他所有元素都被動畫化了。
不使用支持庫怎么辦? 我是否缺少一些必須設置的屬性?
經過一番研究,並感謝Eugen Pechanec的評論,我得出結論, 使用v4支持庫是必經之路 。 API版本28中不推薦使用平台片段,因此我們遲早必須進行鏡像。
我不能說支持庫可以完美地工作,但是至少共享元素的過渡是動態的。
我花了很多時間才能在沒有圖書館的情況下使之工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.