Akhiri acara animasi android

90

Saya memiliki animasi fadeout dalam tampilan (yang berada di dalam fragmen), dan setiap kali animasi terjadi, setelah selesai tampilan menggambar ulang sendiri lagi. Saya menemukan pekerjaan sambil melakukan view.SetVisibility(View.GONE). Tapi itu tidak menunggu animasinya selesai. Saya ingin mengeksekusi kode setVisibility ini hanya setelah animasi selesai. Apa cara terbaik untuk melakukannya?

Paulo Barros
sumber
Kirimkan kode Anda bagaimana Anda menampilkan animasi ....
Lalit Poptani

Jawaban:

175

Anda dapat menambahkan pendengar Animasi ke objek animasi Anda seperti

anim.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationStart(Animation arg0) {
    }           
    @Override
    public void onAnimationRepeat(Animation arg0) {
    }           
    @Override
    public void onAnimationEnd(Animation arg0) {
    }
});
berkah
sumber
5
Jika Anda ingin mencegah animasi fadeout dimulai lagi saat animasi sedang berlangsung, gunakan if (!anim.hasStarted() || anim.hasEnded())untuk mendeteksi apakah animasi masih berjalan.
theczechsensation
36

Secara fungsional sama dengan jawaban yang diterima tetapi dengan cara yang jauh lebih ringkas:

                           /* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
    @Override
        public void run() {
            theView.setVisibility(View.GONE);
        }
    });

Nikmati :)

Antzi
sumber
3
Jelas dan satu baris. Jawaban teratas! Dapat secara sederhana dengan menggunakan lambda.withEndAction(() -> theView.setVisibility(View.GONE));
theBugger
2
Ingatlah bahwa ini adalah API level 16 (4.1) dan di atasnya.
Tommie
Solusi luar biasa, teman saya. Terima kasih!
Vlad Ivchenko
Info penting: - Tindakan hanya dijalankan jika animasi berakhir secara normal, jika ViewPropertyAnimator dibatalkan selama animasi tersebut, runnable tidak akan berjalan.
Sarthak_ssg5
1
Bekerja seperti pesona, juga saat menggunakan komponen navigasi di runnable. (Pendengar animasi selalu macet ketika saya menavigasi dengan komponen nav.)
Luigi_Papardelle
9

Cukup ambil objek animasi Anda dan tambahkan pendengar animasi ke dalamnya. Berikut adalah contoh kode:

rotateAnimation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub

**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION**


            }
        });
Gaurav Arora
sumber
1

Contoh untuk Kotlin

var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image)
    val fadeOutAnimation = R.anim.fade_out_animation
    val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation)
    fadeOutImage.startAnimation(animation)

    animation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationRepeat(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationEnd(p0: Animation?) {
            fadeOutImage.visibility = View.INVISIBLE
        }
    })
richc
sumber
Anda mungkin menyimpan beberapa baris menggunakanfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi