переключение деятельности без анимации - PullRequest
151 голосов
/ 07 августа 2011

Как правильно использовать флаг Intent 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. Отключить анимацию также в случае возврата от второго действия к первому.

Ответы [ 8 ]

244 голосов
/ 16 февраля 2012

Вы можете создать стиль,

 <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

172 голосов
/ 20 ноября 2013

Если ваш контекст является активностью, вы можете вызвать overridePendingTransition :

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

Итак, программно:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
33 голосов
/ 01 декабря 2014

Попробуйте этот код,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
22 голосов
/ 02 сентября 2015

Вы также можете просто делать это во всех действиях, с которых вы не хотите переходить:

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

Мне нравится этот подход, потому что вам не нужно связываться со стилем вашей деятельности.

5 голосов
/ 15 августа 2011

Это не пример использования или объяснение того, как использовать FLAG_ACTIVITY_NO_ANIMATION, однако он отвечает, как отключить анимацию переключения Activity, как указано в заголовке вопроса:

Android, как отключить эффект «стирание» при запуске нового занятия?

2 голосов
/ 15 февраля 2018

Вот однострочное решение, которое работает всего за 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>

Ура!

1 голос
/ 30 декабря 2017

создайте свой собственный стиль, перекрывающий Android: Theme

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

Затем используйте его в манифесте так:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>
0 голосов
/ 27 мая 2019

Линия в стиле темы работает нормально, но при этом анимация заменяется белым экраном. Особенно на более медленном телефоне - это действительно раздражает. Итак, если вы хотите мгновенный переход - вы можете использовать это в стиле темы:

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