共享元素转换被其他视图阻止

Shared element transition blocked by other views

我正在尝试实现共享元素转换,我将一些文本从一个片段共享到另一个片段。在我尝试将它与 Fade 转换结合之前,实际的共享元素动画效果很好。现在共享元素隐藏在其他淡入淡出的内容后面,并且只有在淡出结束后才可见。

我正在从片段 A 到片段 B 制作动画。

在片段 A 中,我在 onCreate 中设置 exitTransition 属性,如下所示:

exitTransition = Fade()

在片段 B 中,我也在 onCreate 中设置 enterTransition 属性:

enterTransition = Fade()

实际的共享元素转换正在包含 activity:

中触发
supportFragmentManager.commit {
      replace(R.id.fragmentContainer, FragmentB.newInstance())
      addSharedElement(sharedView, "transition_name")
      setReorderingAllowed(true)
      addToBackStack(null)
    }

正在片段 B 的 onCreate 中设置用于共享元素的动画:

TransitionSet set = new TransitionSet();
set.setOrdering(TransitionSet.ORDERING_TOGETHER);

Transition changeBounds = new ChangeBounds();
changeBounds.addTarget(R.id.logo);
changeBounds.addTarget("logo_transition_name");
set.addTransition(changeBounds);

ChangeTransform changeTransform = new ChangeTransform();
changeTransform.addTarget(R.id.logo);
changeTransform.addTarget("logo_transition_name");
set.addTransition(changeTransform);

Transition textSize = new TextSizeTransition();
textSize.addTarget(R.id.logo);
textSize.addTarget("logo_transition_name");
set.addTransition(textSize);

sharedElementEnterTransition = set;

我错过了什么?

这里有一张 gif 供参考:

最终,我通过在正在转换的徽标 TextView 上设置 scale 来解决此问题。

具体来说,我从之前由 George Mount 撰写的堆栈溢出答案中了解到,ChangeTransform 转换将(有点神奇地)处理共享元素视图的重新父级处理,这样它就不会被另一种观点。

在调试 ChangeTransform 转换后,我发现它的 createAnimator 方法从未被调用过。看起来这是因为正在共享的视图在片段 A 和片段 B 之间没有任何缩放或旋转变化。

在片段 A 中的徽标 TextView 上设置 0.99 的比例会导致 createAnimator 方法被调用并且视图正确地过渡 超过 其他视图而不是在他们下面。

怀疑 因为人们通常共享图像视图,所以两个图像之间通常存在比例差异,所以这个问题没有那么明显。我可能是错的。