6

一开始就发现了fresco的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 截图:转场截图:
在此处输入图像描述


在此处输入图像描述

4

1 回答 1

2

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

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

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

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

准备就绪后,我将更新此答案。

编辑:

@burzumrus 提供了一个实现,你可以在GitHub上找到。Fresco 的 GitHub 页面上也有关于此问题的主题。

于 2016-02-03T23:23:00.583 回答