Activity
之間共享元素
實現的轉場動畫
, 需要API>=21
才支持.
但是 轉場動畫
在 support
包裏面提供了支持. 所以沒有API 21
的限制.
可以參考Transition
轉場動畫的文章: https://blog.csdn.net/angcyo/article/details/90288786
Activity共享元素
步驟1
啓動新的 Activity
時, 指定 options
參考類:
ActivityCompat.startActivity(@NonNull Context context, @NonNull Intent intent, @Nullable Bundle options)
options
的獲取:
ActivityOptionsCompat.makeSceneTransitionAnimation(@NonNull Activity activity, Pair<View, String>... sharedElements)
封裝後:
AHelper().apply {
activity = this@MainActivity
transitionView(image_view, "image_view")
transitionView(text_view, "text_view")
start {
Intent(this@MainActivity, Activity2::class.java)
}
}
步驟2
在新的Activity
裏面指定相同名字的transitionName
也可以用代碼的方式設置:
ViewCompat.setTransitionName(@NonNull View view, String transitionName)
同時設置動畫, 通過Activity
的Window
對象
window.setEnterTransition
window.setExitTransition
window.setSharedElementExitTransition
window.setSharedElementEnterTransition
封裝後:
AHelper().apply {
activity = this@Activity2
transitionView(image_view, "image_view")
transitionView(text_view, "text_view")
defaultTransition()
doIt()
}
Fragment共享元素
注意:這玩意坑特麼多.
- 必須使用
replace
的方式啓動新的Fragment
纔有效replace
之前, 必須已經有一個或者多個Fragment
在FragmentManager
裏面back
操作不支持動畫
步驟1
添加共享元素:
FragmentTransaction.addSharedElement(@NonNull View var1, @NonNull String var2);
封裝後:
FHelper().apply {
fragmentManager = getFragmentManager()
transitionView(image_view, "image_view")
transitionView(text_view, "text_view")
start {
replace(R.id.root_layout, MainFragment2())
addToBackStack("MainFragment2")
}
}
步驟2
必須在Fragment
的onCreate
方法中設置動畫
Fragment.setEnterTransition()
Fragment.setExitTransition()
Fragment.setSharedElementEnterTransition()
Fragment.setSharedElementReturnTransition()
封裝後:
class MainFragment2 : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
FHelper().apply {
fragment = this@MainFragment2
defaultTransition()
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val inflate = inflater.inflate(R.layout.activity_main2, container, false)
FHelper().apply {
transitionView(inflate.findViewById(R.id.image_view), "image_view")
transitionView(inflate.findViewById(R.id.text_view), "text_view")
doIt()
}
return inflate
}
}
磚廠地址: https://github.com/angcyo/TransitionDemo
羣內有各(pian)種(ni)各(jin)樣(qun)
的大佬,等你來撩.
聯繫作者
請使用QQ掃碼加羣, 小夥伴們都在等着你哦!
關注我的公衆號, 每天都能一起玩耍哦!