我有两个片段CatFragment
和DogFragment
。我有一只新狗,不再爱我的猫,所以我想在CatFragment
上添加DogFragment()
,然后在它们之间做一个Crossfade动画。
fragmentManager!!.beginTransaction()
.setCustomAnimations(
R.anim.fade_in,
R.anim.fade_out,
R.anim.fade_in,
R.anim.fade_out
)
.add(R.id.frame, DogFragment())
.addToBackStack(null)
.hide(fragmentManager!!.findFragmentByTag(CatFragment.TAG))
.commitAllowingStateLoss()
我的CatFragment()
有两个状态:
-
Cat
(我猫的美丽照片( -
LoadingABetterPet
(只是一个进度栏(
在这些状态之间切换时,片段的视图在内部交叉。
我的DogFragment()
有1个状态:我的全新狗的美丽图片。
流:
用户看到以下流程:
CatFragment.Cat
-(内部crossfade( -> CatFragment.LoadingABetterPet
- (Fragment Manager Crossfade( -> DogFragment
。
当用户在DogFragment
看到时击中时,我希望他们在其Cat
状态下查看CatFragment
。
但是,当DogFragment
在屏幕上动画时,CatFragment
在内部并行运行自己的Crossfade动画从LoadingABetterPet
到Cat
。这会在.add()
Fragment Manager动画中引起一些伪像,其中用户部分看到我的猫。
为了避免这种情况,我希望CatFragment
在fragmentManager
运行动画时将动画从LoadingABetterPet
延迟到Cat
。我该怎么做?
支持片段管理器是否会公开动画当前正在运行?
我建议另一种解决方案。我个人更喜欢在相应的Fragment
中加载数据。我建议将加载移至DogFragment
并将您的工作流程更改为
CatFragment.Cat --> (FragmentManager crossfade)
--> DogFragment.Loading --> (crossfade) --> DogFragment.Dog