2011-09-30 20 views
74

Mam animację znikającą w widoku (która jest wewnątrz fragmentu) i za każdym razem, gdy animacja się dzieje, po jej zakończeniu widok ponownie się odrysowuje. Znalazłem pracę związaną z robieniem view.SetVisibility(View.GONE). Ale nie czeka na zakończenie animacji. Chciałbym wykonać ten kod setVisibility dopiero po zakończeniu animacji. Jaki jest najlepszy sposób na zrobienie tego?Zdarzenie zakończenia animacji android

+0

postu kod jak jesteś przedstawiający animacja .... –

Odpowiedz

139

Możesz dodać słuchacza animacji do obiektu animacji jak

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

Jeśli chcesz, aby animacja znikała ponownie, gdy animacja jest w toku, użyj 'if (! anim.hasStarted() || anim.hasEnded())', aby sprawdzić, czy animacja jest nadal bieganie. – theczechsensation

8

Wystarczy wziąć swój obiekt animacji i dodać animacji słuchacza do niego. Oto przykładowy 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** 


      } 
     }); 
15

Funkcjonalnie taka sama jak zaakceptowanej odpowiedzi, ale w znacznie bardziej zwięzły sposób:

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

Enjoy :)

+1

Wyczyść i jedno-liniowy. Najlepsza odpowiedź! Można go sprowadzić za pomocą lambda '.withEndAction (() -> theView.setVisibility (View.GONE));' – theBugger

+0

tylko w ten sposób dzięki niestandardowym animacjom ... dzięki bro –

+2

Należy pamiętać, że jest to poziom interfejsu API 16 (4.1) i powyżej. – Tommie

Powiązane problemy