Отключить анимацию слайдов активности при запуске новой активности? - PullRequest
121 голосов
/ 18 февраля 2010

У меня есть действие, которое запускает другое действие нажатием кнопки. По умолчанию в новых версиях ОС Android ОС будет анимировать новую активность, перемещаясь справа налево.

Есть ли способ отключить эту анимацию? Я просто хочу, чтобы новая активность появлялась без какой-либо анимации.

Ответы [ 10 ]

179 голосов
/ 20 апреля 2010

Флаг FLAG_ACTIVITY_NO_ANIMATION отлично работает для отключения анимации при запуске действий.

Чтобы отключить аналогичную анимацию, которая запускается при вызове finish() в действии, то есть анимация перемещается справа налево вместоВы можете позвонить overridePendingTransition(0, 0) после вызова finish(), и следующая анимация будет исключена.

Это также работает в анимации, если вы вызываете overridePendingTransition(0, 0) после вызова startActivity(...).

156 голосов
/ 18 июня 2012

ИМХО этот ответ здесь решит вопрос самым элегантным способом.

Разработчик должен создать стиль ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

затем в манифесте установите его как тему для действия или всего приложения.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Вуаля! Красиво и просто ..

p.s. кредиты оригинальному автору, пожалуйста ..

30 голосов
/ 08 апреля 2013

Применить

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

, затем

overridePendingTransition(0, 0);

Это остановит анимацию.

18 голосов
/ 11 марта 2010

Просто укажите Intent.FLAG_ACTIVITY_NO_ANIMATION флаг при запуске

17 голосов
/ 25 июля 2015

На мой взгляд, лучший ответ - использовать "overridePendingTransition(0, 0);"

, чтобы избежать просмотра анимации, когда вы хотите Intent для Activity использования:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

и дляне отображается анимация при нажатии кнопки «Назад». Метод переопределения onPause в вашем newactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
12 голосов
/ 07 мая 2014

Это работает для меня при отключении завершения анимации активности.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
9 голосов
/ 23 июля 2014

Я на 4.4.2 и вызов overridePendingTransition (0, 0) в onCreate () запускающего действия отключит начальную анимацию (вызов overridePendingTransition (0, 0) сразу после startActivity () не работал). Как отмечено в другом ответе, вызов overridePendingTransition (0, 0) после finish () отключает закрывающую анимацию.

Кстати, я обнаружил, что установка стиля с помощью «android: windowAnimationStyle»> @ null (еще один ответ, упомянутый здесь) привел к сбою, когда мои действия по запуску попытались установить заголовок панели действий. Отладив далее, я обнаружил, что каким-то образом это приводит к сбою window.hasFeature (Window.FEATURE_ACTION_BAR) в initActionBar () Activity.

7 голосов
/ 15 октября 2014

FLAG_ACTIVITY_NO_ANIMATION может работать, но для меня это не помогло в сочетании с FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK. По-видимому, я вижу анимацию для создания новой задачи со свежим стеком действий, когда я перемещаюсь в боковом направлении к другим видам верхнего уровня.

То, что сработало здесь, вызывало "overridePendingTransition (0, 0);" либо сразу после моего вызова startActivity (), либо onPause (). Оба способа работали, но выполнение после startActivity () дает мне немного больше контроля над тем, когда я хочу анимацию, а когда нет.

1 голос
/ 15 ноября 2018

Чтобы избежать черного фона при запуске активности уже в стеке, я добавил overridePendingTransition(0,0) in onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
1 голос
/ 07 мая 2015

У меня была похожая проблема с появлением черного экрана при скользящем переходе от одного занятия к другому с использованием overridependingtransition. и я пошел по пути ниже, и это сработало

1) создал noanim.xml в папке anim

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

и б

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Первый параметр в качестве моей исходной анимации и второй параметр, который является анимацией выхода в качестве моей фиктивной анимации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...