Android'de animasyon olmadan etkinlik nasıl değiştirilir?


165

FLAG_ACTIVITY_NO_ANIMATIONAndroidManifest dosyasındaki Intent bayrağını nasıl düzgün bir şekilde kullanabilirim ? Sorunumun önemsiz olduğunu düşünüyorum, ancak buna iyi bir örnek veya çözüm bulamıyorum.

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

Bununla birlikte, kompliator tarafından herhangi bir hata rapor dataedilmemiştir , ancak doğru değildir. Etkinlikler arasında geçiş yapılması durumunda animasyonu devre dışı bırakmak istiyorum. Ben getWindow().setWindowAnimations(0);onCreate veya onResume kullanabilirsiniz ama bayrak kullanmak daha iyi bir yol, değil mi?

Kodda da kullanabilirsiniz:

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

Ancak bu bayrağı Android Manifest'te kullanmak istiyorum. İkinci aktiviteden ilk duruma dönme durumunda da animasyonu devre dışı bırakmak için.


Temayı kullanma önerisini buldum - aktiviteler veya tüm uygulama için enter, çıkış animasyonlarını tanımlayarak. Birisi bana bu konuda daha fazla bilgi verebilir mi?
woyaru

Yanıtlar:


269

Bir stil oluşturabilirsiniz,

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

ve manifest'teki etkinliğiniz için tema olarak ayarlayın:

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

Özel giriş ve çıkış animasyonlarını belirlemek için bir stil de tanımlayabilirsiniz. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


Teşekkürler, bu özellikle farklı bir görev yakınlığı olan sonlardan hariç tutulan şeffaf / diyalog temalı aktiviteler için harika çalışıyor. Bu olmadan, animasyon bir diyalogun açılması için çok garip sonuçlar yaratmaya devam etti!
3c71

bu artık Lollipop / Android 5.0 için çalışmıyor gibi görünüyor?
kenyee

Android 5'im var ve benim için çalışıyor. Uygulama stilim şöyle görünüyor: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android: windowAnimationStyle"> @ null </item> </style>
eatyourgreens

6.0'da da mükemmel çalışır. Harika bir ipucu. Aşağıda sorduğum gibi, * bir uygulamayı ilk başlattığınızda oluşan animasyonu nasıl devre dışı bırakacağımı merak ediyorum ... bir yolu var mı ?!
Fattie


191

Bağlamınız bir etkinlikse overridePendingTransition yöntemini çağırabilirsiniz :

StartActivity'nin (Niyet) tatlarından hemen sonra arayın veya bir sonraki gerçekleştirilecek açık bir geçiş animasyonu belirtmek için bitirin.

Yani, programlı olarak:

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

adb ile de yapmak mümkün mü?
android geliştirici

@TalAngel overridePendingTransitionAPI seviyesi 5'e eklendi. Yani hayır "her" Android sürümünde çalışmaz, ancak sanırım 5'ten sonra daha yüksek bir API seviyesi hedeflersiniz.
Bruno Bieri

43

Bu kodu deneyin,

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

1
Bu, aktiviteyi hizmetten başlatırken gerçekten yardımcı olur.
DearDhruv

24

Bunu sadece geçiş yapmak istemediğiniz tüm etkinliklerde de yapabilirsiniz:

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

Bu yaklaşımı seviyorum çünkü aktivitenizin tarzıyla uğraşmak zorunda değilsiniz.


Harika bir ipucu. Bir uygulamayı ilk başlattığınızda * oluşan animasyonu nasıl devre dışı bırakacağımı merak ediyorum ... bir yolu var mı ?!
Fattie

@Fattie Başlatma etkinliğinizin onStart () yöntemini geçersiz kılın ve aynı kodu buna yerleştirin.
Jawad Adil


4

İşte minSdkVersion 14size yerleştirmeniz gereken en düşük düzeyde çalışan tek katmanlı bir çözüm res/styles.xml:

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

şöyle:

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

Şerefe!


3

Tema stilindeki çizgi iyi çalışıyor, ancak animasyon beyaz bir ekranla değiştiriliyor. Özellikle daha yavaş bir telefonda - gerçekten sinir bozucu. Yani, anında bir geçiş istiyorsanız - bunu tema stilinde kullanabilirsiniz:

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

2

kendi stilini oluşturmak android geçersiz kılma: Tema

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

Sonra bu şekilde manifestte kullanın:

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

0

Niyete başladıktan sonra şu kodu kullanabilirsiniz:

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

Kullanılırsa, amaç animasyon veya geçiş olmadan çalışır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.