Aktivite geçişinde solma animasyonu nasıl gerçekleştirilir?


89

Logo etkinliğim ve Ana etkinliğim arasında bir geçiş efekti kodluyorum, ancak etkinliğin kaybolmadan önce en üste taşınması sorunum var:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

Sadece yok olma etkisi elde etmek için bu kodu nasıl geliştirebilirim?

Yanıtlar:


239

Kendi oluşturabilir .xml animasyon dosyaları yeni solmaya Activityve akımı fade out Activity:

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="500" />

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="1.0" android:toAlpha="0.0"
           android:fillAfter="true"
           android:duration="500" />

Bunu şöyle bir kodda kullanın: (İçinde Activity)

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

Yukarıdaki kod, halihazırda etkin Activityolanı solduracak ve yeni başlatılan durumda yavaş yavaş Activitygeçişi sağlayacak şekilde kaybolacaktır .

GÜNCELLEME : @Dan J, yerleşik Android animasyonlarını kullanmanın performansı artırdığına dikkat çekti , gerçekten de bazı testler yaptıktan sonra durum böyle buldum. Yerleşik animasyonlarla çalışmayı tercih ediyorsanız, şunu kullanın:

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

Kaynak kimliğine erişmek android.Ryerine referans verdiğime dikkat edin R.

GÜNCELLEME : API seviyesi 19'da tanıtılan Geçiş sınıfını kullanarak geçişleri gerçekleştirmek artık yaygın bir uygulamadır .


65
Yerleşik Android animasyonlarını kullanmak daha yumuşak bir geçişle sonuçlanıyor gibi görünüyor: overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);Bu dosyaları görüntülemek, size özel animasyonlarınızı nasıl geliştireceğiniz konusunda ipuçları da verebilir (örn.
— Dan J

42
Bir undescore var: overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);:)
— AlvaroSantisteban

OverridePendingTransition onCreate veya her Intent'te kullanmak zorunda mıyım? Ya da ne istediğime bağlı mı? Teşekkürler.
— Ricardo

19
"Geçersiz Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); startActivity(intent, bundle);
— kılmadan

1
Yukarıdaki geçiş yalnızca Geliştirici seçeneklerinde etkinleştirilirse yürütülür, bkz. Stackoverflow.com/a/30422015/2914140 .
— CoolMind

23

Cevabı oleynikd tarafından yeniden gönderiyorum çünkü basit ve düzenli

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);

OverridePendingTransition bazı cep telefonlarında çalışmadığından ve Enes'in çözümü çok hoş olmadığından, bu cevap doğru olmalı.
— Hugo Passos

19

Ayrıca aşağıdaki gibi onCreate yönteminde aktivitenize animasyon ekleyebilirsiniz çünkü overridePendingTransition bazı mobil cihazlarda çalışmıyor veya cihaz ayarlarına bağlı ...

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);

1
Önceki veya üst etkinlik için animasyon nasıl kullanılır?
— Mehmed

9
Ana etkinliğe geri geçiş için animasyonu ayarlamak için şu kodu kullanın: @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
— John Verco

15

Bu kodu style.xml dosyanızda da kullanabilirsiniz, böylece activity.java'da başka bir şey yazmanıza gerek kalmaz.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
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.