web-dev-qa-db-fra.com

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

J'essaie d'obtenir une animation personnalisée pour travailler avec mon fragment.

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

Java.lang.RuntimeException: nom d'animateur inconnu: translate

Le XML pour l'animation est 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 présenté 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();
}

J'ai du mal à comprendre les solutions dans les autres threads. Si quelqu'un pouvait le faire, je l'apprécierais vraiment.

67
SalicBlu3

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 Sous-catégorie

 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;

        }
106
Ammar ali

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

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

  • Si vous ciblez plus de 3.0 et en utilisant des fragments natifs: vous devez utiliser le nouvel apis d'animation, c'est-à-dire, ObjectAnimators (ils vont dans animator/et sont R.animator.thing).

112
minivac

Comme @minivac a répondu, vous mélangez deux API. Jetez un coup d’œil à Afficher les animations de la carte affichée exemple à partir de Android guides de formation pour mieux comprendre comment ajouter des animations personnalisées aux transactions de fragments. Il résout exactement votre problème. problème.

0
txedo