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

时间:2018-02-07 18:45:10

标签: android android-fragments

我有两个片段CatFragmentDogFragment。我有一只新狗,不再爱我的猫,所以我想在DogFragment()之上添加CatFragment,并在它们之间做一个交叉淡入淡出动画。

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(只是一个进度条)
  3. 在这些状态之间切换时,片段内部视图会交叉淡入淡出。

    我的DogFragment()有一个状态:我全新的狗的漂亮照片。

    流速:

    用户看到以下流程:

    CatFragment.Cat - (内部交叉淡化) - > CatFragment.LoadingABetterPet -  (片段管理器交叉淡化) - > DogFragment

    当用户在DogFragment可见时返回时,我希望他们看到CatFragment状态为Cat

    然而,当DogFragment动画到屏幕上时,CatFragment并行内部会在LoadingABetterPetCat内运行自己的交叉渐变动画。这会在.add()片段管理器动画期间导致一些伪像,用户可以看到我的猫。

    为了避免这种情况,我希望CatFragmentLoadingABetterPet正在运行动画时将动画从Cat延迟回fragmentManager。我怎么能这样做?

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

1 个答案:

答案 0 :(得分:-1)

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

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