Etkinlik bitişine nasıl animasyon ekleyebilirim ()


98

Etkinliğim oluşturulduğunda ve bu iyi çalıştığında overridePendingTransition kullanıyorum, fade in harika çalıştığını görebiliyorum, ancak aktivitenin bitişini denediğimde ve canlandırdığımda hala varsayılan sağdan sola slaytı yapıyor.

Aktiviteye başladığımda ilk olarak çıkış animasyonunu şu şekilde tanımlamayı denedim:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

Sonra aktiviteyi bitirdiğimde de yapmayı denedim

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

Ancak bu yaklaşımların hiçbiri çıkış animasyonu için "sağdan sola" kaymayı engellemeyecektir. Neyi yanlış yaptığıma dair bir fikrin var mı?

Yanıtlar:


228

Finish () çağrıldıktan hemen sonra bekleyen geçişi geçersiz kılıyorum;

Benim durumumda, geçişleri önlemek için yaptım.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

Sipariş önemlidir :)


5
"Ayrıntılar" tarafından, @Goofyahead ek Faaliyetini - ymmv olarak adlandırıyor. Bu teknik benim için çalıştı, 2.x'te Theme.Dialog'daki bir animasyonu değiştirdi, ancak 3.x veya 4.x değil
larham1

8
Nasıl R.anim.nothinggörünüyor?
sandalone

@Felipe Micaroni Lalli cevabını kullanın, 0 animasyon yok demektir.
Yeung

Bu da bana yardımcı oldu. Kendi animasyonlarınızı nasıl tanımlayacağınızı açıklıyor: stackoverflow.com/questions/5151591/…
Adam

23
Her finish()durumda geçişleri önlemek için yöntemi geçersiz kılabilirsiniz (örnek olarak geri düğmesine basılır): @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
eugeneek

30

Bu soru zaten yanıtlandı, ancak bir etkinlikten çıkarken bir animasyon yerleştirmenin en etkili yolu, ilgili etkinliğin "finish ()" yöntemini geçersiz kılmaktır:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

24

Finishing () yöntemini çağırmak yerine onPause'daki animasyonları yapılandırmak için isFinishing () yöntemini kullanmanızı öneririm.

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}

Bu neden daha iyi?
Manuel


19

Bu sorunu şu tür bir yaklaşımla düzelttim:

animasyonla açmak için:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

Animasyonla kapatmak için:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}

12

Bunu bir tema üzerinden yapmaya bakın. Aktiviteler veya tüm uygulama için giriş çıkış animasyonlarını tanımlayabilirsiniz.


EVET! İşte buydu. İyi gibi. Zaten bir tema uygulamıştım ve temanın tanımlanmış bir animasyonu vardı, bu yüzden kendi animasyonumun çalışmasını sağlayamadım. Bilgi için çok teşekkürler!
b-ryce

3
temalar tarafından hangi geçişlerin sunulacağına bakmam için bana bir ipucu verebilir misiniz? Ayrıca tüm sitelere özel bir geçiş ayarlamak istiyorum ama nasıl yapılacağını bilmiyorum.
LuckyMalaka

@Zapnologica benzer bir soru için verdiğim bu diğer cevap onu biraz daha anlatıyor. stackoverflow.com/questions/4940574/…
Nathan Schwermann

6

@Schwiz tarafından verilen cevabın ardından, burada yerel slide_up ve slide_down animasyonlarını tanımladığım yerleşik Dialog teması için bir animasyon geçersiz kılma var. Etkinliğim, bu geçişlerin girip çıkması için MyDialog temasını belirtir.

<style name="Animation.MyDialog" parent="android:Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="android:Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>


5

Alt etkinliğinizi başlatmak için startActivityForResult'u kullanın ve ana etkinliğinizin onActivityResult () 'da:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}

Bu, arka basışta çalışır (fiziksel düğme). "Yukarı" okla da çalışmasını sağlamak için şu yanıta bakın: /programming/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is- clicked / 20161352 # 20161352
lenooh

Unutulmaması gereken önemli: overridePendingTransition'ın super.onActivityResult çağrılmadan önce çağrılması gerekir. Aksi takdirde pendint geçişi geçersiz kılınmayacaktır!
goemic
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.