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?

b-ryce
sumber

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

Goofyahead
sumber
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);
}
Bahadir Tasdemir
sumber
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);
    }

}
Pablo A. Martínez
sumber
Mengapa lebih baik?
Manuel
20
finish();
overridePendingTransition(0, 0);
Felipe
sumber
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);
}
Deivison Sporteman
sumber
12

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

Nathan Schwermann
sumber
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>

larham1
sumber
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);
}
Chris.Zou
sumber
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