Keep Action Bar Стабильный во время анимации перехода на активность

Я использую панель действий в своем приложении для 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>

Анимация выполняется успешно, но слайд также включает панель действий.

Есть ли способ, чтобы панель действий оставалась стабильной во время перехода активности?

Ответ 1

Есть ли способ, чтобы панель действий оставалась стабильной во время перехода активности?

Нет, извините. Если вы переключаетесь между действиями, изменяется весь пользовательский интерфейс, панель действий и все.

Если ваше желаемое поведение пользовательского интерфейса имеет важное значение, перепишите приложение, чтобы иметь одно действие и несколько фрагментов, и используйте анимации для перехода между фрагментами.

Ответ 2

Это можно сделать в Android Lollipop, используя Activity Transition Animations, используя тот же макет для панели действий во всех действиях и определяя действие bar, чтобы быть Shared Element следующим образом:

Во-первых, обязательно включите переходы активности в 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 как 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);
ActivityOptions options = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar);
    options = ActivityOptions.makeSceneTransitionAnimation(WelcomeActivity.this, appBar, "appBar");
}
ActivityCompat.startActivity(WelcomeActivity.this, intent, options != null ? options.toBundle() : null);

Это будет поддерживать панель приложений при переходе между действиями.