在活动过渡动画期间保持操作栏稳定

时间:2013-06-09 21:42:46

标签: android android-activity android-actionbar android-animation

我在Android应用程序中使用Action Bar,我在活动过渡期间使用滑动动画,通过调用:

startActivityForResult(i, ALL_OK);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

在我的xml文件中,我有以下代码:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
 <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="400"/>  
</set>

<set xmlns:android="http://schemas.android.com/apk/res/android">   
 <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="400"/>
</set>

动画已成功执行,但幻灯片还包含操作栏。

在活动过渡期间,Action Bar是否会保持稳定?

2 个答案:

答案 0 :(得分:13)

  

在活动过渡期间,Action Bar是否会保持稳定?

不,抱歉。如果您在活动之间切换,整个UI都会更改,操作栏和所有。

如果您需要的UI行为必不可少,请将您的应用重写为包含一个活动和多个片段,并使用动画在片段之间进行转换。

答案 1 :(得分:4)

可以使用Activity Transition Animations在Android Lollipop中完成,在所有活动中使用相同的操作栏布局,并按以下方式将操作栏定义为共享元素:

首先,确保在v21 / styles.xml中启用活动转换并使用NoActionBar主题,以便您可以创建自定义操作栏:

<style name="AppTheme.NoActionBar">
    ...
    <!-- enable window content transitions -->
    <item name="android:windowActivityTransitions">true</item>
    <!-- specify enter and exit transitions -->
    <item name="android:windowEnterTransition">@android:transition/slide_right</item>
    <item name="android:windowExitTransition">@android:transition/slide_left</item>
    <!-- specify shared element transitions -->
    <item name="android:windowSharedElementEnterTransition">@transition/app_bar_transform</item>
    <item name="android:windowSharedElementExitTransition">@transition/app_bar_transform</item>
</style>

然后将app_bar_transform.xml(在res / transition目录中)定义为changeBounds,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet>
    <changeBounds/>
</transitionSet>

由于应用栏布局在所有活动中都相同,因此不会进行转换。

在自定义AppBarLayout中设置android:transitionName属性:

<android.support.design.widget.AppBarLayout 
    ...
    android:id="@+id/app_bar"
    android:transitionName="appBar"
    ...
</android.support.design.widget.AppBarLayout>

将此布局用于所有活动中的操作栏:

<include layout="@layout/app_bar"/>

然后,当您想要开始下一个活动时,将应用栏布局定义为 像这样的共享元素:

final Intent intent = new Intent(getApplicationContext(), MainActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, toolbar, "appBar");
ActivityCompat.startActivity(WelcomeActivity.this, intent, options.toBundle());

这将在活动之间转换时保持应用栏的位置。