为什么Transition.captureStartValues和Transition.captureEndValues具有相同的View和相同的属性?

9

我有一个自定义的Transition用于在两个Activity之间共享元素。

我的过渡效果没有生效,因为TransitionValues参数在captureStartValuescaptureEndValues方法中使用了相同的View和属性。所以,当开始和结束值相同时,我的过渡效果就无事可做了。

为什么会出现这种情况?


活动转换实际上并不会将视图从一个活动传输到另一个活动。相反,它会传输位置、大小和高度,并在该位置重新布局共享元素视图。如果您需要传输其他内容,则需要自行处理。 - George Mount
但是,当我构建用于共享元素的自定义转换时,我需要从起始场景和结束场景中捕获这些不同的值。如果视图和属性相同,我该如何获取这些值? - André Mion
在我的ActivityA布局中,我的主角View的scrollX = 10。 在我的ActivityB布局中,它的scrollX = 50。 我无法从ActivityA到ActivityB动画过渡,因为captureStartValues和captureEndValues始终使用scrollX = 50的View调用。 - André Mion
你有没有找到解决这个问题的方法? - alexbchr
2个回答

1
在我的情况下,我想要过渡两个元素的背景可绘制对象。经过大量挖掘,我最终意识到传递给onCaptureStartValues方法的视图并不是来自第一个活动的实际视图,而是由过渡框架通过传递的包裹创建的表示。这是反直觉的,但最终让我找到了以下文章,其中有一个信息丰富的示例,演示如何完成你想要的操作。

https://medium.com/@belokon.roman/custom-transitions-in-android-f8949870bd63

一般情况下,您可以使用SharedElementCallback将自定义属性注入到转换对象中。我真的希望这种行为在未来会改变,因为它感觉像是hack-ish。

0

在编程方面,您必须使用setEnterSharedElementCallback方法设置一个SharedElementCallback回调函数,并重写onSharedElementStartonSharedElementEnd方法以及在开始和结束时设置滚动。当它逆转时,结束会先于开始被调用以反转过渡效果。


我在我的活动中的布局XML中设置了这些滚动值。我只是想读取这些值,以便在我的自定义过渡中使用它们来创建我的动画器。 - André Mion

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