71 votes

Animation personnalisée Android FragmentTransaction (Nom de l'animateur inconnu: traduire)

Je vais essayer d'obtenir une animation personnalisée à travailler avec mon fragment.

J'ai suivi les tutoriels en ligne, mais j'ai l'erreur ci-dessous:

java.lang.RuntimeException: Inconnue nom de l'animateur: traduire

Le XML pour l'animation ci-dessous:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
    android:fromXDelta="100%"
    android:toXDelta="0"
    android:duration="300" />
</set>

Le fichier Java est indiqué ci-dessous:

public void goCategory(View v) {        
    FragmentTransaction ft = fm.beginTransaction();     
    ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left);              
    ft.show(fragment);
    ft.commit();
}

Je vais avoir de la difficulté à comprendre les solutions dans les autres threads. Si quelqu'un pouvait dumb it down pour moi, j'avais vraiment l'apprécier.

Merci

117voto

minivac Points 359

Vous mélangez probablement deux apis. Il y a deux cas:

  • Si le ciblage est inférieur à 3,0 ou si vous utilisez des fragments de support v4: vous devez utiliser l'ancienne API, c'est-à-dire celle que vous utilisez (elles vont dans anim /, et sont R.anim.thing )

  • Si vous ciblez au-dessus de 3.0 et utilisez des fragments natifs: Vous devez utiliser le nouvel apis d'animation, à savoir ObjectAnimators (ils vont dans animator / et sont R.animator.thing ).

115voto

Ammar aly Points 496

Cela ne fonctionnera pas, vous devriez utiliser un animateur d'objet

animator / slide_in_left.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="1000"
        android:valueTo="0"
        android:valueType="floatType" />

</set>
 

animator / slide_out_right.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-1000"
        android:valueType="floatType" />

</set>
 

Classe Subcatagory

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            // return super.onCreateView(inflater, container, savedInstanceState);

            View view = (ViewGroup) inflater.inflate(R.layout.product_frame, null);
            getFragmentManager().beginTransaction()
                    .replace(R.id.sub_header, new Sub_Header()).commit();
            getFragmentManager()
                    .beginTransaction()
                    .setCustomAnimations(R.animator.slide_in_left,
                            R.animator.slide_out_right, 0, 0)
                    .replace(R.id.product_frame, new Sub_Catagory_Grid()).commit();

            view.getWidth();
            return view;

        }
 

-4voto

shreyas Points 455

Mettez votre animation xml en anim folder et non animator folder .et utilisez

 ft.setCustomAnimations(R.anim.anim_in_left, R.anim.anim_out_left); 
 

si cela ne fonctionne pas, vous pouvez utiliser

ft.setTransition(R.anim.anim_in_left, R.anim.anim_out_left); aussi vous pouvez utiliser l'animation par défaut fournie par Android comme suit

 ft.setTransition(android.R.anim.slide_in_left, slide_out_right);
 

aussi vous pouvez ajouter une animation de traduction dans le code comme celui-ci

   Animation animation = new TranslateAnimation(
      Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
      Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f
  );
  animation.setDuration(100);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X