三星Nougat 7.0共享元素过渡问题

4
我正在使用共享元素动画从一个活动转到另一个活动。我有一个父布局,其中包含一些子项,并尝试使用共享元素过渡将它们动画到详细视图中。我已经在github上推出了一个示例repo (这里)
在Android模拟器、我的Pixel和未更新到Nougat 7.0的三星手机上,过渡效果运行得很好。在运行7.0的三星设备上,容器中的图像和文本不能正确地进行动画处理。在我的示例应用程序中,顶部容器是三星设备上存在问题的容器,底部是始终应该呈现的样子。这是三星设备上的样子
看代码,你可能会问为什么不采用第二种解决方案,只对容器进行动画处理,从而使内部也随之动画。我发现在某些布局中,Android无法正确地动画化内部,有时甚至根本不动画化。因此,我不得不指定每个要进行共享元素过渡的视图。还有其他人遇到这个问题吗?

经过多小时的研究,我终于看到了发生了什么。我在 此次提交 中向共享元素回调添加了一堆日志语句。该提交也修复了这个问题。 - Meefle
结果表明,在目标活动中,在onSharedElementStart方法中,子视图的坐标是相对于其父视图而不是根视图的。在Android模拟器、我的Pixel或早期的三星设备上,它相对于根视图具有正确的坐标。但在三星Nougat设备上,它的坐标仍然相对于其父视图。 - Meefle
1个回答

0

我在使用三星设备时遇到了同样的问题,尽管我没有测试过 Nougat 和之前的操作系统。

如果可能的话,请仅转换 ViewGroup,而不要在 TextView 上使用 transitionName 属性。

<LinearLayout
    ...
    android:transitionName="ViewGroupTransition">

    <!-- No transitions on the TextViews -->
    <TextView
        android:id="@+id/my_text_view1"
        ...
        />

    <TextView
        android:id="@+id/my_text_view2"
        ...
        />

</LinearLayout>

在此处为TextView添加transitionNames会导致转换按照您所描述的方式工作不正确。如果转换的目标视图中存在类似的TextView,则不应要求使用transitionNames来完成TextView之间的转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接