我正在为activity X和activity Y之间的转换添加动画效果。
X中包含一个带有图片的列表,当单击某张图片时,在activity Y中会将其放大并"缩放"显示。
因此,这张图片是X和Y之间的共享元素。我已经在XML布局中设置了其transitionName
属性。
这是启动activity Y的代码:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName());
startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle());
到目前为止,一切都运转良好。然而,当活动Y被输入时,我还想对布局进行动画处理。
为此,我已经在一个XML文件(picture_enter.xml)中定义了转换:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
<transition
class="android.transition.Explode"
android:startDelay="200">
<targets>
<target android:targetId="@+id/top_toolbar_container" />
</targets>
</transition>
</transitionSet>
最后,在活动 Y 的 onCreate
中初始化过渡:
TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.picture_enter);
Window window = getWindow();
window.setEnterTransition(transition);
但这从未被执行。只有图像的"缩放"效果按预期工作。我还尝试过以编程方式定义过渡效果。
有什么建议吗?
<targets>
标签是这种奇怪行为的主要原因。如果您删除<targets>
标签,则默认情况下转换将应用于activity Y
。小建议:您可以直接在transitionSet
中定义转换,例如explode
,slide
等,transition
标签主要用于定义自定义转换。 - blizzard