2013-10-27 12 views

Odpowiedz

25

Proponuję utworzyć pewną klasę bazową, z której rozciągnie się cała twoja Fragments, i zdefiniować kilka metod, które można przesłonić w celu obsługi zdarzeń animacji. Następnie przesłoń onCreateAnimation() (zakładając, że korzystasz z biblioteki wsparcia), aby wysłać zdarzenie w wywołaniach zwrotnych animacji. Na przykład:

protected void onAnimationStarted() {} 

protected void onAnimationEnded() {} 

protected void onAnimationRepeated() {} 

@Override 
public Animation onCreateAnimation (int transit, boolean enter, int nextAnim) { 
    //Check if the superclass already created the animation 
    Animation anim = super.onCreateAnimation(transit, enter, nextAnim); 

    //If not, and an animation is defined, load it now 
    if (anim == null && nextAnim != 0) { 
     anim = AnimationUtils.loadAnimation(getActivity(), nextAnim); 
    } 

    //If there is an animation for this fragment, add a listener. 
    if (anim != null) { 
     anim.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart (Animation animation) { 
       onAnimationStarted(); 
      } 

      @Override 
      public void onAnimationEnd (Animation animation) { 
       onAnimationEnded(); 
      } 

      @Override 
      public void onAnimationRepeat (Animation animation) { 
       onAnimationRepeated(); 
      } 
     }); 
    } 

    return anim; 
} 

Następnie za Fragment podklasy, po prostu nadpisać onAnimationStarted() aby wyłączyć przyciski i onAnimationEnded() umożliwienia przycisków.

+2

To nie działa z przejściami materiałowymi, takimi jak Slide lub Explode, ponieważ 'anim' ma zawsze wartość NULL. – Servus7

Powiązane problemy