Вимкнути анімацію слайдів активності під час запуску нової діяльності?


140

У мене є діяльність, яка запускає іншу діяльність, натискаючи кнопку. За замовчуванням у нових версіях ОС для Android ОС буде анімувати нову активність, ковзаючи справа наліво.

Чи є спосіб відключити цю анімацію? Я просто хочу, щоб нова активність з’явилася без будь-якої анімації.

Відповіді:


190

The FLAG_ACTIVITY_NO_ANIMATIONПрапор працює відмінно для відключення анімації при запуску діяльності.

Щоб вимкнути аналогічну анімацію, яка спрацьовує під час дзвінка finish()на діяльність, тобто анімація ковзає справа направо наліво, ви можете зателефонувати overridePendingTransition(0, 0)після виклику, finish()і наступна анімація буде виключена.

Це також працює над анімацією, якщо ви телефонуєте overridePendingTransition(0, 0)після дзвінка startActivity(...).


9
Зверніть увагу , що FLAG_ACTIVITY_NO_ANIMATIONі overridePendingTransitionобидва рівня API 5+ тільки.
azdev

Це не допомагає, коли ви повертаєтесь із заняття натисканням клавіші Назад.
Яр

4
Ти найкращий. overridePendingTransition (0, 0) -> є богоподібним. Він лише переосмислює анімацію закінчення (), але не анімацію, що запускається під час відновлення попередньої діяльності.
Philipp Jahoda

1
Мені не подобається ця відповідь, оскільки вона не охоплює переходи, викликані натисканням програмних клавіш «назад». ОП запитує, як "відключити" анімацію, а не "вибірково сказати додатку не відтворювати її"
1owk3y

3
Якщо ви також хочете відключити або замінити анімацію "назад", замініть метод фінішу () у своїй діяльності та введіть цей виклик туди разом із викликом на super.finish (). Проблема вирішена.
Гришка

171

ІМХО ця відповідь тут вирішує питання найелегантніше ..

Розробник повинен створити стиль ,

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

то в маніфесті встановіть його як тему для діяльності або цілого застосування.

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

Вуаля! Приємно і легко ..

ps кредити оригінальному автору, будь ласка ..


1
Це не працює для Back, і це змінює вигляд заголовка (це робить його маленьким) ...
Marek

ти впевнений, що ти не додав ще якісь властивості в стилі, тому що ніхто інший не повідомив про цей "ефект", згадуючи ..
Ewoks

Щойно для довідки, це може спричинити проблеми в ієрархії перегляду, де потрібно запитатиWindowFeature ().
Мартін Маркончіні

Було б добре, якщо ви трохи розробимо, тож ми уникатимемо можливих проблем
Ewoks

4
@Marek Я думаю, що ваша проблема полягає в неправильному зміні батьків = "android: Theme". Ви повинні змінити його відповідно до теми, яку ви хочете використовувати, в основному цей код просто вимикає конкретну анімацію в темі. наприклад, використовуйте "Theme.AppCompat.Light.NoActionBar" замість "android: Theme", і ви отримаєте те, що я маю на увазі. Я сподіваюся, що це допомагає.
Рекомендується

33

Застосувати

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

тоді

overridePendingTransition(0, 0);

Це зупинить анімацію.


28

На мою думку, найкраща відповідь - використовувати "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);
}


13

Це працює для мене, коли вимкнути закінчення анімації.

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

9

Я перебуваю в 4.4.2, і виклик overridePendingTransition (0, 0) в операції запуску onCreate () відключить стартову анімацію (виклик overridePendingTransition (0, 0) одразу після запускуActivity () НЕ працює). Як зазначено в іншій відповіді, виклик overridePendingTransition (0, 0) після закінчення () відключає анімацію закриття.

До речі, я виявив, що встановлення стилю за допомогою "android: windowAnimationStyle"> @ null (інша відповідь, згадана тут) спричинило збій, коли в моїй операції запуску спробували встановити назву рядка дій. Налагоджуючи помилку, я виявив, що якимось чином це призводить до відмови window.hasFeature (Window.FEATURE_ACTION_BAR) у initActionBar діяльності ().


1
а що з потребою? єдині топ діяльності та все таке.
Лассі Кіннунен

7

FLAG_ACTIVITY_NO_ANIMATION може спрацювати, але не зробила для мене хитрощів у поєднанні з FLAG_ACTIVITY_CLEAR_TASK та FLAG_ACTIVITY_NEW_TASK. Я, мабуть, бачу анімацію для створення нового завдання зі свіжим стеком активності, коли я переходжу бічно до моїх інших поглядів верхнього рівня.

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


2

У мене була подібна проблема отримання чорного екрану при ковзанні переходу від однієї діяльності до іншої за допомогою overridependingtransition. і я пішов шляхом нижче, і це спрацювало

1) створив noanim.xmlпапку в анімації

<?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);

Перший параметр як моя оригінальна анімація, а другий параметр, який є анімацією виходу, як моя фіктивна анімація


1

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

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

}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.