Yeni etkinlik başlatılırken etkinlik slayt animasyonu devre dışı bırakılsın mı?


140

Bir düğmeyi tıklatarak başka bir etkinliği başlatan bir etkinliğim var. Varsayılan olarak, Android'in daha yeni işletim sistemi sürümlerinde, işletim sistemi sağdan sola kayan yeni etkinliği canlandıracaktır.

Bu animasyonu devre dışı bırakmanın bir yolu var mı? Yeni etkinliğin herhangi bir animasyon olmadan görünmesini istiyorum.

Yanıtlar:


190

FLAG_ACTIVITY_NO_ANIMATIONBayrak etkinliklerini başlatırken animasyon devre dışı bırakma cezasını çalışır.

finish()Bir Etkinliği çağırırken tetiklenen benzer animasyonu devre dışı bırakmak için , yani animasyon bunun yerine sağdan sola kayar, çağrı overridePendingTransition(0, 0)yaptıktan sonra arayabilirsiniz finish()ve sonraki animasyon hariç tutulur.

Bu, aramadan overridePendingTransition(0, 0)sonra ararsanız animasyon içinde de çalışır startActivity(...).


9
FLAG_ACTIVITY_NO_ANIMATIONVe overridePendingTransitionher ikisinin de yalnızca API Seviye 5+ olduğunu unutmayın .
azdev

Geri tuşuna basıldığında bir etkinlikten geri dönerken bu yardımcı olmaz.
Yar

4
Sen en iyisin. overridePendingTransition (0, 0) -> tanrısaldır. Yalnızca finish () animasyonunu geçersiz kılar, ancak önceki etkinliği sürdürürken tetiklenen animasyonu değil.
Philipp Jahoda

1
Bu cevabı beğenmedim çünkü 'geri' Softkey tuşlarına basmanın neden olduğu geçişleri kapsamıyor. OP, animasyonu nasıl 'devre dışı bırakacağını' sorar, 'seçerek uygulamaya oynamamasını söyler'
1owk3y

3
"Geri" animasyonunu da devre dışı bırakmak veya geçersiz kılmak istiyorsanız, etkinliğinizdeki finish () yöntemini geçersiz kılın ve bu çağrıyı super.finish () çağrısıyla birlikte buraya koyun. Sorun çözüldü.
16'da Grishka

171

IMHO burada bu cevabı en zarif şekilde çözer ..

Geliştirici bir stil oluşturmalı ,

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

daha sonra manifest'te etkinlik veya tüm uygulama için tema olarak ayarlayın .

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

İşte bu kadar! Güzel ve kolay..

ps orijinal yazara kredi lütfen ..


1
Back için çalışmaz ve başlık çubuğunun görünümünü değiştirir (küçük yapar) ...
Marek

u tarzı başka bazı özellikler eklemedim emin misiniz, neden kimse bu "etkisi" u söz bildirdi ..
Ewoks

Yalnızca başvuru amacıyla, bu, görünüm hiyerarşisinde requestWindowFeature () öğesine gereksinim duyacağınız bir soruna neden olabilir.
Martin Marconcini

u biraz ayrıntılı olsaydı iyi olurdu, bu yüzden olası sorunları önlemek
Ewoks

4
@Marek Sanırım sorun ebeveyn = "android: Tema" doğru değiştirmiyor. Kullanmak istediğiniz temayla değiştirmelisiniz, temel olarak bu kod bir temada belirli animasyonu devre dışı bırakır. örneğin "android: Tema" yerine "Theme.AppCompat.Light.NoActionBar" kullanın ve ne demek istediğimi elde edersiniz. Umut ediyorum bu yardım eder.
Tavsiye

33

Uygulamak

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

sonra

overridePendingTransition(0, 0);

Bu animasyonu durduracaktır.


28

Bence en iyi cevap kullanmak "overridePendingTransition(0, 0);"

Eğer istediğinizde animasyonu görmemek için Intentbir karşı Activitykullanılmak:

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

ve geri düğmesine bastığınızda animasyonu görmemek onPauseiçinnewactivity

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


13

Etkinlik animasyonunu bitirirken bu benim için çalışıyor.

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

9

Ben 4.4.2 çıkıyorum ve fırlatma etkinliğin onCreate içinde overridePendingTransition (0, 0) () çağırarak başlayan animasyon devre dışı bırakır (overridePendingTransition startActivity () işe yaramadı hemen sonra (0, 0) çağırarak). Başka bir cevapta belirtildiği gibi, finish () işleminden sonra overridePendingTransition (0, 0) çağrılması kapanma animasyonunu devre dışı bırakır.

Btw, "android: windowAnimationStyle"> @ null (burada belirtilen başka bir cevap) ile stil ayarlamanın, başlatma etkinliğim eylem çubuğu başlığını ayarlamaya çalıştığında çökmeye neden olduğunu buldum. Daha fazla hata ayıklama, bir şekilde bunun window.hasFeature (Window.FEATURE_ACTION_BAR) faaliyetin initActionBar () başarısız olmasına neden olduğunu keşfetti.


1
onresume ne olacak? tek bir üst faaliyet ve tüm bunlar.
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATION işe yarayabilir, ancak FLAG_ACTIVITY_CLEAR_TASK ve FLAG_ACTIVITY_NEW_TASK ile birleştirildiğinde benim için hile yapmıyordu. Görünüşe göre, diğer üst düzey görünümlerime yanal olarak ilerlerken yeni bir etkinlik yığını ile yeni bir görev oluşturmak için animasyonu görüyorum.

Burada ne işe yaradı "overridePendingTransition (0, 0);" startActivity () çağrımdan hemen sonra veya onPause (). Her iki yol da işe yaradı, ancak startActivity () işleminden sonra bunu yapmak, animasyonlar istediğimde ve istemediğimde biraz daha fazla kontrol sağlıyor.


2

Bir etkinlikten diğerine geçişin kaymasında siyah bir ekranın görünmesi gibi benzer bir sorunum vardı overridependingtransition. ve aşağıdaki yolu takip ettim ve işe yaradı

1) noanim.xmlanim klasöründe

<?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" />

ve kullanılmış

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Orijinal animasyonum olarak ilk parametre ve sahte animasyonum olarak çıkış animasyonu olan ikinci parametre


1

Yığındaki bir etkinlik başlatırken siyah bir arka plan önlemek amacıyla, bir ilave overridePendingTransition(0,0)olarak onStart():

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

}
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.