Bagaimana cara memberikan animasi saat memanggil aktivitas lain di Android?


115

Saya memiliki dua Aktivitas A dan B. Saya ingin mengecilkan Animasi saat Aktivitas A memanggil B dan memaksimalkan animasi saat Aktivitas B memanggil A. Saya tidak memerlukan file xml animasi untuk ini.

Saat kita memanggil Aktivitas lain di Android, ia memberikan animasi defaultnya dan kemudian memanggil animasi menyusut.

Yang saya inginkan adalah animasi default tidak boleh muncul dan animasi yang saya inginkan harus muncul.

Bisakah kita memberikan animasi saat memanggil Aktivitas lain?

Jawaban:


144

Sejak API 16, Anda bisa menyediakan bundel opsi aktivitas saat memanggil Context.startActivity (Intent, Bundle) atau metode terkait. Itu dibuat melalui pembangun ActivityOptions :

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());

Jangan lupa untuk memeriksa metode lain dari pembuat ActivityOptions dan ActivityOptionsCompat jika Anda menggunakan Pustaka Dukungan.



API 5+:

Untuk aplikasi yang menargetkan API level 5+, ada overridePendingTransitionmetode Aktivitas . Dibutuhkan dua ID sumber daya untuk animasi masuk dan keluar. Id dari 0akan menonaktifkan animasi. Panggil ini segera setelah startActivitypanggilan.

yaitu:

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

API 3+:

Anda bisa mencegah animasi default (Geser masuk dari kanan) dengan Intent.FLAG_ACTIVITY_NO_ANIMATIONbendera di maksud Anda.

yaitu:

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

lalu di Aktivitas Anda, Anda hanya perlu menentukan animasi Anda sendiri.

Ini juga berfungsi untuk 1.5 API (Level 3).


4
Apa yang Anda maksud saat mengatakan "tentukan animasi Anda sendiri"? Bagaimana kamu melakukan ini? Terima kasih!
pqn

Saya memiliki pertanyaan yang sama. Mungkin dalam animasi start di onResume dan onPause.
Tima

apakah ada cara untuk menggunakan Animator?
Pengembang android

Anda juga dapat menggunakan yang sama setelah memanggil finish ()!
thiagolr

Bukankah R.anim.fade_inmasih animasi file xml yang seharusnya kita miliki res\anim ?
Alex Jolig

78

Anda harus menggunakan metode OverridePendingTransition untuk mencapainya, yang ada di kelas Activity . Contoh Animasi dalam folder res / anim contoh apidemos. Periksa. Lebih dari memeriksa demo di ApiDemos / App / Activity / animation .

Contoh:

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

1
Terima kasih balasannya. Metode overridePendingTransition didukung dari API level 5 dan saya ingin aplikasinya didukung dari Android 1.5. Apakah ada cara lain untuk menyediakan Animasi dari satu Aktivitas ke aktivitas lainnya.
sunil

5
luar biasa! ini sangat menyenangkan untuk dimainkan
Someone Somewhere

@sunil saya memiliki quetion yang sama seperti milik Anda. bisakah Anda menyelesaikan masalah? animasi dengan api level 3 atau 4 (bukan 5)
Dr.jacky

menyimpan kode animasi di onResume () akan menyebabkan animasi diputar saat pengguna keluar dari aplikasi dan kembali. Tidak ideal di banyak aplikasi.
Vihaan Verma

Saya perlu menambahkan super.onResume();, mendapatkan: "android.util.SuperNotCalledException: Activity {com.abc.MyActivity} tidak memanggil melalui super.onResume ()"
Gene Bo


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.