Як переключити активність без анімації в 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.