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.
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;
}
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
).
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.