Як переключити активність без анімації в Android?


165

Як я можу правильно використовувати прапор Намір FLAG_ACTIVITY_NO_ANIMATIONу файлі AndroidManifest? Я вважаю, що моя проблема є тривіальною, але я не можу знайти гарного прикладу чи рішення її.

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

Однак компілятор не повідомляє про помилку, але dataне є правильним. Я просто хочу відключити анімацію в разі переключення між видами діяльності. Я можу getWindow().setWindowAnimations(0);скоріше використовувати onCreate або onResume, але краще використовувати прапор, чи не так?

Я можу використовувати також у коді:

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

Але я хочу використовувати цей прапор в Android Manifest. Відключення анімації також у випадку повернення з другої активності до першої.


Я знайшов пропозицію використовувати тему - визначивши анімацію для входу, виходу для дій або всієї програми. Чи може хтось надати мені більше інформації про це?
— woyaru

Відповіді:


269

Ви можете створити стиль,

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

і встановіть це як тему для вашої діяльності в маніфесті:

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

Ви також можете визначити стиль, щоб вказати спеціальні анімації для входу та виходу. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


Дякую, це працює чудово, особливо для прозорих / діалогових тематичних заходів, виключаних із залишків із різною спорідненістю до завдання. Без цього анімація продовжувала показувати створення дуже дивних результатів для відкриття діалогу!
— 3c71

здається, це більше не працює для Lollipop / Android 5.0?
— kenyee

У мене є Android 5, і він працює для мене. Мій стиль програми виглядає приблизно так: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android: windowAnimationStyle"> @ null </item> </style>
— eatyourgreens

Також чудово працює в 6.0. Чудова порада. Як я запитую нижче, мені цікаво, як відключити анімацію, що відбувається при * першому запуску програми ... Чи є спосіб ?!
— Fattie

5
вийде з ладу, якщо продовжити AppCompatActivity
— Mike6679

191

Якщо ваш контекст є діяльністю, ви можете викликати overridePendingTransition :

Зателефонуйте відразу після одного з ароматів startActivity (Intent) або закінчіть, щоб вказати явну анімацію переходу для наступного виконання.

Отже, програмно:

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

чи можна це зробити і через adb?
— андроїд розробник

@TalAngel overridePendingTransitionдодано на рівні 5 API. Тому ні, це не працює на "кожній" версії Android, але я думаю, ви орієнтуєтеся на рівень API вище, ніж 5.
— Бруно Бієрі

43

Спробуйте цей код,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

1
Це дійсно допомагає при запуску діяльності з обслуговування.
— DearDhruv

24

Ви також можете просто зробити це в усіх видах діяльності, з яких ви не хочете переходити:

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

Мені подобається такий підхід, тому що вам не доведеться возитися зі стилем своєї діяльності.


Чудова порада. Цікаво, як відключити анімацію, що відбувається при * першому запуску програми ... Чи є спосіб ?!
— Fattie

@Fattie Замініть метод onStart () вашої запускової діяльності та введіть у цьому той же код.
— Джавад Аділ


4

Ось однолінійне рішення, яке працює настільки низько, як minSdkVersion 14ви повинні вставити у вас res/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

так:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

Ура!


3

Рядок у стилі теми працює чудово, але він замінює анімацію білим екраном. Особливо на повільному телефоні - це справді дратує. Отже, якщо ви хочете миттєвий перехід - ви можете використовувати це в стилі теми:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

2

створити свій власний стиль для Android: Тема

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

Потім використовуйте його в маніфесті так:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

0

Після запуску наміру ви можете використовувати цей код:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

Якщо використовується, наміри працюватимуть без анімації та переходів

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