如何观察片段管理器当前是否有动画运行



我有两个片段CatFragmentDogFragment。我有一只新狗,不再爱我的猫,所以我想在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()有两个状态:

  1. Cat(我猫的美丽照片(
  2. LoadingABetterPet(只是一个进度栏(

在这些状态之间切换时,片段的视图在内部交叉。

我的DogFragment()有1个状态:我的全新狗的美丽图片。

流:

用户看到以下流程:

CatFragment.Cat-(内部crossfade( -> CatFragment.LoadingABetterPet- (Fragment Manager Crossfade( -> DogFragment

当用户在DogFragment看到时击中时,我希望他们在其Cat状态下查看CatFragment

但是,当DogFragment在屏幕上动画时,CatFragment在内部并行运行自己的Crossfade动画从LoadingABetterPetCat。这会在.add() Fragment Manager动画中引起一些伪像,其中用户部分看到我的猫。

为了避免这种情况,我希望CatFragmentfragmentManager运行动画时将动画从LoadingABetterPet延迟到Cat。我该怎么做?

支持片段管理器是否会公开动画当前正在运行?

我建议另一种解决方案。我个人更喜欢在相应的Fragment中加载数据。我建议将加载移至DogFragment并将您的工作流程更改为

CatFragment.Cat --> (FragmentManager crossfade) 
--> DogFragment.Loading --> (crossfade) --> DogFragment.Dog

最新更新