Activity
之间共享元素
实现的转场动画
, 需要API>=21
才支持.
但是 转场动画
在 support
包里面提供了支持. 所以没有API 21
的限制.
可以参考Transition
转场动画的文章: https://blog.csdn.net/angcyo/article/details/90288786
启动新的 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)
}
}
在新的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()
}
注意:这玩意坑特么多.
- 必须使用
replace
的方式启动新的Fragment
才有效replace
之前, 必须已经有一个或者多个Fragment
在FragmentManager
里面back
操作不支持动画
添加共享元素:
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")
}
}
必须在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扫码加群, 小伙伴们都在等着你哦!
关注我的公众号, 每天都能一起玩耍哦!