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.