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?


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) {
    }
});

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


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**


            }
        });

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

Anda mungkin menyimpan beberapa baris menggunakanfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi
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.