Animasyon etkinliğini bitir android


90

Bir görünümde (bir parçanın içinde) kaybolan bir animasyon var ve animasyon her gerçekleştiğinde, bittikten sonra görünüm kendini yeniden çiziyor. Yapmakla ilgili bir iş buldum view.SetVisibility(View.GONE). Ancak animasyonun bitmesini beklemez. Bu setVisibility kodunu yalnızca animasyon bittikten sonra çalıştırmak istiyorum. Bunu yapmanın en iyi yolu nedir?


Animasyonu nasıl gösterdiğinizi kodunuzu
gönderin

Yanıtlar:


175

Animasyon nesnenize Animasyon dinleyicisi ekleyebilirsiniz.

anim.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationStart(Animation arg0) {
    }           
    @Override
    public void onAnimationRepeat(Animation arg0) {
    }           
    @Override
    public void onAnimationEnd(Animation arg0) {
    }
});

5
Karartma animasyonunun animasyon devam ederken yeniden başlamasını önlemek istiyorsanız if (!anim.hasStarted() || anim.hasEnded()), animasyonun hala çalışıp çalışmadığını tespit etmek için kullanın .
theczechsensation

36

İşlevsel olarak kabul edilen cevapla aynı, ancak çok daha kısa bir şekilde:

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

Zevk almak :)


3
Şeffaf ve tek astarlı. En iyi cevap! Lambda kullanımıyla basitleştirilebilir.withEndAction(() -> theView.setVisibility(View.GONE));
theBugger

2
Bunun API seviyesi 16 (4.1) ve üstü olduğunu unutmayın.
Tommie

Harika çözüm dostum. Teşekkür ederim!
Vlad Ivchenko

Önemli bilgi: - Eylem yalnızca animasyon normal şekilde sona erdiğinde çalıştırılır, bu animasyon sırasında ViewPropertyAnimator iptal edilirse çalıştırılabilir çalışmaz.
Sarthak_ssg5

1
Runnable'da navigasyon bileşenini kullanırken de bir tılsım gibi çalışır. (Gezinme bileşeniyle gezinirken animasyon dinleyicisi her zaman çöktü.)
Luigi_Papardelle


9

Basitçe animasyon nesnenizi alın ve ona animasyon dinleyicisi ekleyin. İşte örnek kod:

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

Kotlin Örneği

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

kullanarak bazı satırları kaydedebilirsinizfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.