ImageView共享元素转换(在Activity之间)以错误的scaleType开头

Jac*_*Fan 6 android activity-transition shared-element-transition fresco android-5.1.1-lollipop

我在开始时发现了SimpleDraweeView 壁画的问题.但是我用android ImageView替换后问题仍然存在.所以我无法确定问题是由于Android还是仅仅是壁画.

问题是什么

  1. 第一个活动具有循环视图,每个视图都有一个ImageView(或SimpleDraweeView).想要的scaleType是"centerCrop"
  2. 第二个活动只有一个ImageView.想要的scaleType是"fitCenter"

但是在我的私人项目中,以及在示例项目中.
https://github.com/JackFan-Z/ActivitySharedElementTransition
ImageView以scaleType"fitCenter"开头,这是错误的.

我试图推迟共享元素转换,并在SharedElementCallback的回调中设置不同scaleType的共享元素.但它们都没有真正起作用.任何人都可以帮助弄清楚出了什么问题,或者在哪里调试?

该问题的屏幕截图

第一个Activity的截图:
在此输入图像描述

过渡的截图:
在此输入图像描述

pla*_*nko 2

正如您所观察到的,ImageView这是 Android 的限制。但是,我正在对 Fresco 比例类型进行一些更改,一旦我推送更改,就可以执行此操作。

简而言之,ScaleType不再是一个Enum(非常不灵活),而是改为一个可以实现任意缩放的接口。此变更已在内部落地,很快将推送至 GitHub。

除了上述内容之外,我正在致力于 InterpolatingScaleType 的实现,它仅根据插值值 (0.0 - 1.0) 在两个基础比例类型之间进行插值。值 0.0 返回与基础scaleType1 相同的变换,而值1.0 返回与基础scaleType2 相同的变换。中间值是两者之间的线性组合。

InterpolatingScaleType 允许在两种不同的比例类型之间平滑地进行插值,这在动画(例如进行视图转换时)非常方便。

一旦准备好,我将更新这个答案。

编辑:

@burzumrus 非常友善地提供了一个实现,您可以在GitHub上找到该实现。Fresco 的 GitHub 页面上也有一个关于此问题的主题。