如何使用android.support.transition.Transition/TransitionSet作为片段共享元素进入/返回转换?

5
谷歌刚刚发布了 android.support.transition 包,提供转换框架的后备,这真是太棒了。

https://developer.android.com/reference/android/support/transition/package-summary.html

不幸的是,当尝试将此包中的 Transition/TransitionSet 对象作为片段事务的共享元素使用时,应用程序会因以下错误而失败:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: gregor.martin.loginregisteractivity, PID: 26186
java.lang.ClassCastException: android.support.transition.TransitionSet cannot be cast to android.transition.Transition
 at android.support.v4.app.FragmentTransitionCompat21.wrapSharedElementTransition(FragmentTransitionCompat21.java:86)
 at android.support.v4.app.BackStackRecord.getSharedElementTransition(BackStackRecord.java:1156)
 at android.support.v4.app.BackStackRecord.configureTransitions(BackStackRecord.java:1222)
 at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1112)
 at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:721)
 at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
 at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
 at android.os.Handler.handleCallback(Handler.java:751)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6077)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

有没有办法将新的后移转换用作共享元素转换?

这里也有同样的问题。有解决方案吗? - Gergely Kőrössy
在Reddit上,有人说:“看起来transition回退的API仅适用于视图级别。您无法将它们用于Activity转换(因为这是通过Activity的窗口完成的,该窗口具有API 21+的转换方法),也无法用于Fragment转换。”让我们开始... - Gergely Kőrössy
1个回答

8

更新(2017-08-31)

看起来,在支持库的即将发布中,support Fragment API 将能够使用support Transition API(请参见 Ian Lake 在原始答案中链接的最新评论)。无论这是否意味着过渡效果将被回溯到 pre-Lollipop 设备,还是只是对转换问题的一个简单解决方案,目前还没有相关信息,但我一旦了解更多信息,就会更新答案。在发布之前,我会抽出时间研究源代码。


原始答案:

这个支持过渡 API 仅适用于视图(至少目前是如此),因此您不能在片段上使用它。真遗憾...

Ian Lake 在 Google+ 回答中确认


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