13

我在我的 Android 应用程序中使用操作栏,我在活动转换期间使用滑动动画,通过调用:

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>

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

有没有办法让动作栏在活动过渡期间保持稳定?

4

2 回答 2

13

有没有办法让动作栏在活动过渡期间保持稳定?

不,对不起。如果您在活动之间切换,则整个 UI 会发生变化,操作栏等等。

如果您想要的 UI 行为是必不可少的,请重写您的应用程序以拥有一个活动和多个片段,并使用动画在片段之间进行转换。

于 2013-06-09T21:44:46.147 回答
4

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

首先,确保在 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());

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

于 2016-03-27T14:38:13.637 回答