不同scaleType之间的Android共享元素转换

Che*_*nhe 6 android shared-element-transition

我关注了这篇android开发博客的文章,这里是他的源代码

该演示效果很好,但通常我们更喜欢centerCrop在图像列表中使用比例类型,并fitCenter在详细模式下使用。当我修改代码来实现这一点时,transition 无法处理缩放类型的变化。当从细节片段返回时,动画以错误的比例类型开始。

我找到了ChangeImageTransform过渡。该文件说:

此转换在场景更改之前和之后捕获 ImageView 的矩阵,并在转换期间对其进行动画处理。

与 ChangeBounds 结合,ChangeImageTransform 允许更改大小、形状或ImageView.ScaleType 的 ImageViews平滑地为内容设置动画。

所以我改变了过渡集:

<transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="375"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:transitionOrdering="together">
  <changeBounds/>
  <changeImageTransform/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

但是动画变得越来越难看:

如何在不同比例类型之间平滑转换?

Joe*_*ler 0

当您使用 ChangeBounds 时,您需要转换子元素和父元素以使转换正常工作。每当元素从左上角进入(就像在第二个视频中一样)时,您可以假设父视图也没有被转换。 在此输入图像描述
我会确保 CardView 也被视为共享元素,这意味着您需要更新第二个片段布局,以便 ImageView 位于 CardView 内部。

另请注意,每个共享元素都需要一个唯一的transitionName...这在过去给我带来了问题。