2016-06-20 11 views
4

Ich frage mich, wie man eine kreisförmige Enthüllung Animation beim Ersetzen von Fragment machen.Kreisbeschneidung Animation beim Ersetzen von Fragment

ich diesen Code bin mit meinem Fragment ersetzen:

 getFragmentManager() 
      .beginTransaction() 
      .replace(R.id.mission_detail_appointment_container, new AppointmentDeclineFragment()) 
      .commit(); 

Und ich habe diesen Code den Kreis offenbare Animation zu tun:

Animator anim = ViewAnimationUtils.createCircularReveal(appointmentContainer, (int)motionEventX, (int)motionEventY, 0, finalRadius); 
anim.start(); 

Gibt es einen Weg, um die Animation zu starten, wenn Ich ersetze mein Fragment? Ich habe gerade die setCustomAnimation-Methode gesehen, aber int-Ressourcen als Argument und ich gehe ein Animator-Objekt.

Danke für Ihre Hilfe

Antwort

14

Ich finde endlich einen Workaround. Für diejenigen, die es brauchen könnten, entschied ich mich dafür, meine Animation mit runden Trägern in Fragmenten zu implementieren.

eine onLayoutChangeListener im onCreateView Methode meiner Fragmente durch die Zugabe:

view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 

      @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
      @Override 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       v.removeOnLayoutChangeListener(this); 
       int cx = getArguments().getInt(MOTION_X_ARG); 
       int cy = getArguments().getInt(MOTION_Y_ARG); 
       int width = getResources().getDimensionPixelSize(R.dimen.fragment_appointment_width); 
       int height = getResources().getDimensionPixelSize(R.dimen.fragment_appointment_height); 

       float finalRadius = Math.max(width, height)/2 + Math.max(width - cx, height - cy); 
       Animator anim = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, finalRadius); 
       anim.setDuration(500); 
       anim.start(); 
      } 
     });