Ale*_*aro 16 android android-activity android-transitions android-5.0-lollipop
我正在设置活动X和活动Y之间的过渡动画.
X包含带有图像的列表,单击图像时会展开并在活动Y中 "缩放" .
因此,此图像是X和Y之间的共享元素.我已经transitionName在XML布局中设置了它的属性.
这是启动活动Y的代码:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName());
startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
直到这里,一切正常.但是,我还想在输入时为活动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>
Run Code Online (Sandbox Code Playgroud)
最后,在onCreate活动Y中我将初始化过渡:
TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.picture_enter);
Window window = getWindow();
window.setEnterTransition(transition);
Run Code Online (Sandbox Code Playgroud)
但这从未执行过.只有图像的"缩放"效果才能正常工作.我也尝试过以编程方式定义转换.
有什么建议?
您应该使用具有以下窗口标签的应用程序主题:
<style name="CustomActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- enable overlapping of exiting and entering activities -->
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在 Mainfest 文件中,应用程序标签内使用 android:theme="@style/CustomActionBarTheme"
在活动 X 中,
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(activity,img_pic, "img_pic");
Run Code Online (Sandbox Code Playgroud)
其中“img_pic”在 Activity X 和 Activity Y 的布局文件中均为 android:transitionName="img_pic"。
注意: android:transitionName 值应该相同才能发生转换。
使用 ActivityOptionsCompat 或 ActivityOptions 打开活动 Y ,
Intent intent = new Intent(context,Activity_Y.class);
startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |