我已经按照本指南、其他一些指南和参考材料进行了这项工作。
以这种风格设置的过渡。我把它放在 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>
在源和目标 ImageViews 中,您需要添加一个名称标签。名称必须相同。
<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 客户端。它不适用于 API 16 客户端,因为 XML 标记无效。
我希望这有帮助。
轻微更新,要在退出时获得反向转换,我不得不打电话
supportFinishAfterTransition();
而不是完成();