Android'de başka bir etkinliği çağırırken nasıl animasyon sağlanır?


115

İki Aktivite A ve B var. Aktivite A B'yi çağırdığında Animasyonu küçültmek ve Aktivite B A'yı çağırdığında animasyonu en üst düzeye çıkarmak istiyorum. Bunun için animasyon xml dosyalarına ihtiyacım yok.

Android'de başka bir Activity'i çağırdığımızda, varsayılan animasyonunu verir ve ardından shrink animasyonunu çağırır.

İstediğim, varsayılan animasyonun gerçekleşmemesi ve istediğim animasyonun gerçekleşmesidir.

Başka bir Aktivite çağırırken canlandırmayı gerçekten verebilir miyiz?

Yanıtlar:


144

API 16'dan beri , Context.startActivity (Intent, Bundle) veya ilgili yöntemleri çağırırken bir etkinlik seçenekleri paketi sağlayabilirsiniz . ActivityOptions oluşturucu aracılığıyla oluşturulur:

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

Oluşturucu ve ActivityOptions diğer yöntemler kontrol etmeyi unutmayın ActivityOptionsCompat Destek Kitaplığı kullanıyorsanız.



API 5+:

API düzeyi 5+ hedefleyen uygulamalar için Etkinlikler overridePendingTransitionyöntemi vardır. Gelen ve giden animasyonlar için iki kaynak kimliği alır. Kimliği 0, animasyonları devre dışı bırakır. Aramadan hemen sonra bunu startActivityarayın.

yani:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

Intent.FLAG_ACTIVITY_NO_ANIMATIONAmacınızdaki bayrakla varsayılan animasyonu (sağdan içeri kaydır) engelleyebilirsiniz .

yani:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

daha sonra Aktivitenizde kendi animasyonunuzu belirtmeniz yeterlidir.

Bu aynı zamanda 1.5 API (Seviye 3) için de geçerlidir.


4
"Kendi animasyonunuzu belirtin" derken neyi kastediyorsunuz? Bunu nasıl yapıyorsun? Teşekkürler!
pqn

Ben de aynı sorum var. Muhtemelen onResume ve onPause'da animasyon başlangıcında.
Tima

Bunun yerine Animator'ı kullanmanın bir yolu var mı?
android geliştiricisi

Finish () çağrıldıktan sonra da aynısını kullanabilirsiniz!
thiagolr

R.anim.fade_inHala içinde olması gerektiğini düşündüğümüz bir xml dosyası animasyonu değil res\anim mi?
Alex Jolig

78

Bunu başarmak için, Activity sınıfında bulunan OverridePendingTransition yöntemini kullanmanız gerekir . Apidemos örneğinin res / anim klasöründeki Örnek Animasyonlar. Kontrol et. ApiDemos / Uygulama / Etkinlik / animasyondaki demoyu kontrol etmekten daha fazlası .

Misal:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
Cevap için teşekkürler. OverridePendingTransition yöntemi API düzey 5'ten destekleniyor ve uygulamanın Android 1.5'ten desteklenmesini istiyorum. Bir Aktiviteden diğerine Animasyon sağlamanın başka bir yolu var mı?
sunil

5
müthiş! oyun oynamak çok eğlenceli
Someone Somewhere

@sunil bende de seninki gibi aynı soru var. problemi çözebilir misin? animasyon api seviyesi 3 veya 4 (5 değil)
Dr.jacky

animasyon kodunu onResume () içinde tutmak, kullanıcı uygulamanın dışına çıkıp geri geldiğinde animasyonun oynatılmasına neden olur. Birçok uygulamada ideal değil.
Vihaan Verma

Eklemem gerekiyordu super.onResume();: "android.util.SuperNotCalledException: Activity {com.abc.MyActivity}, super.onResume ()" için çağrı yapmadı "
Gene Bo


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.