我已经按照这个指南、其他一些指南以及参考资料使它工作起来了。
在这种样式中设置了一个转换。我将其放在res/transition下:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds>
<targets>
<target android:targetId="@id/ivA" />
<target android:targetId="@id/ivB" />
</targets>
</changeBounds>
<changeImageTransform>
<targets>
<target android:targetId="@id/ivA" />
<target android:targetId="@id/ivB" />
</targets>
</changeImageTransform>
</transitionSet>
在源ImageView和目标ImageView中,您需要添加一个名称标记。名称必须相同。
<ImageView
...
android:transitionName="MYTRANSITIONVIEW"
/>
在styles.xml中,添加到应用程序主题中:
<item name="android:windowContentTransitions">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowSharedElementEnterTransition">@transition/my_transition</item>
<item name="android:windowSharedElementExitTransition">@transition/my_transition</item>
我正在片段中运行此代码,因此我以以下方式启动新活动:
Bundle bundle = null;
if (activity != null) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Frag2_, "MYTRANSITIONVIEW");
bundle = options.toBundle();
}
activity.startActivity(i, bundle);
它适用于API 21客户端。由于XML标签无效,因此在API 16客户端上无法工作。
希望这可以帮到您。
稍微更新一下,为了在退出时获得反向转换,我不得不调用
supportFinishAfterTransition()
与其使用finish(),不如使用其他方法;