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?

sunil
sumber

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).

whlk
sumber
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);
}
Praveen
sumber
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
3

Jelly Bean menambahkan dukungan untuk ini dengan metode ActivityOptions.makeCustomAnimation () . Tentu saja, karena hanya ada di Jelly Bean, ini sangat tidak berguna untuk tujuan praktis.

phreakhead
sumber
5
Ini tidak berharga lagi :)
Greg Ennis
Gunakan ActivityOptionsCompatjika Anda menargetkan pra-JellyBean.
Thuy Trinh