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

时间:2015-10-01 07:39:29

标签: android android-5.1.1-lollipop shared-element-transition activity-transition fresco

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

问题是什么

  1. 第一个活动具有循环视图,每个视图都有一个ImageView(或SimpleDraweeView)。想要的scaleType是" centerCrop"
  2. 第二个活动只有一个ImageView。想要的scaleType是" fitCenter"
  3. 然而,在我的私人项目中,以及在示例项目中 https://github.com/JackFan-Z/ActivitySharedElementTransition
    ImageView以scaleType" fitCenter"开头,这是错误的。

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

    问题的屏幕截图

    第一个活动的截图:
    enter image description here

    过渡的截图:
    enter image description here

1 个答案:

答案 0 :(得分:2)

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

简而言之,ScaleType不是Scaleum(非常不灵活),而是将ScaleType更改为可以实现任意缩放的接口。这一变化已在内部登陆,很快将被推送到GitHub。

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

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

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

编辑:

@burzumrus非常友好地提供了一个可以在GitHub找到的实现。在Fresco的GitHub页面上还有thread这个问题。