Bagaimana saya bisa menambahkan animasi ke aktivitas selesai ()


98

Saya menggunakan overridePendingTransition ketika aktivitas saya dibuat dan berfungsi dengan baik, saya dapat melihat fade in berfungsi dengan baik, tetapi ketika saya mencoba dan menganimasikan penyelesaian pada aktivitas, ia masih melakukan slide kanan ke kiri default.

Saya pertama kali mencoba mendefinisikan animasi keluar ketika saya memulai aktivitas sebagai berikut:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

Kemudian saya mencoba melakukannya setelah saya menyelesaikan aktivitas juga

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

Namun tak satu pun dari pendekatan ini yang akan mencegah slide "kanan ke kiri" untuk animasi keluar. Adakah ide tentang apa yang saya lakukan salah?

Jawaban:


228

Saya mengganti transisi yang tertunda hanya setelah memanggil finish ();

Dalam kasus saya, saya telah melakukannya untuk menghindari transisi.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

Order itu penting :)


5
dengan "Details", @Goofyahead menamai Aktivitas terlampirnya - ymmv. Teknik ini berhasil bagi saya untuk menggantikan animasi dari Theme.Dialog di 2.x, tetapi tidak 3.x atau 4.x
larham1

8
Bagaimana R.anim.nothingtampilannya?
sandalone

Gunakan jawaban @Felipe Micaroni Lalli, 0 berarti tidak ada animasi.
Yeung

Ini seperti membantu saya juga. Ini menjelaskan cara menentukan animasi Anda sendiri: stackoverflow.com/questions/5151591/…
Adam

23
Anda dapat mengganti finish()metode untuk menghindari transisi dalam semua kasus (tombol kembali ditekan, sebagai contoh): @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
eugeneek

29

Pertanyaan ini telah terjawab, tetapi cara paling efisien untuk meletakkan animasi saat keluar dari aktivitas adalah dengan mengganti metode "finish ()" dari aktivitas terkait:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

24

Saya akan menyarankan untuk menggunakan metode isFinishing () untuk mengonfigurasi animasi di onPause daripada memanggil finish ()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}

Mengapa lebih baik?
Manuel


19

Saya memperbaiki masalah ini menggunakan pendekatan semacam ini:

untuk membuka dengan animasi:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

Untuk menutup dengan animasi:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}

12

Pertimbangkan melakukannya melalui sebuah tema. Anda dapat menentukan animasi keluar masuk untuk aktivitas atau seluruh aplikasi


IYA! Itu dia. Baik. Saya sudah menerapkan tema, dan tema sudah ditentukan animasi, jadi itulah mengapa saya tidak bisa membuat animasi saya sendiri berfungsi. Terima kasih banyak atas wawasannya!
b-ryce

3
dapatkah Anda memberi saya petunjuk di mana melihat transisi mana yang akan disampaikan oleh tema. Saya juga ingin mengatur transisi kustom ke semua situs tetapi saya tidak tahu caranya.
LuckyMalaka

@Zapnologica, jawaban lain yang saya berikan untuk pertanyaan serupa menjelaskannya sedikit lebih banyak. stackoverflow.com/questions/4940574/…
Nathan Schwermann

6

Mengikuti jawaban dari @schwiz, berikut adalah animasi override untuk tema Dialog built-in, di mana saya telah mendefinisikan animasi slide_up dan slide_down lokal. Aktivitas saya menentukan tema MyDialog agar transisi ini masuk dan keluar.

<style name="Animation.MyDialog" parent="android:Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="android:Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>


5

Gunakan startActivityForResult untuk memulai aktivitas anak Anda dan di onActivityResult () aktivitas induk Anda:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}

Ini bekerja dengan menekan kembali (tombol fisik). Untuk membuatnya juga berfungsi dengan panah "atas", lihat jawaban ini: /programming/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is- diklik / 20161352 # 20161352
lenooh

Penting untuk diperhatikan: overridePendingTransition perlu dipanggil sebelum memanggil super.onActivityResult. Jika tidak, transisi pendint tidak akan diganti!
goemic
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.