Je reçois cette erreur lors de l'utilisation
getActivity().getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.animator.card_flip_right_in, R.animator.card_flip_right_out,
R.animator.card_flip_left_in, R.animator.card_flip_left_out)
.replace(R.id.content_fragment, new DaysSinceBirthSettingFragment())
.addToBackStack(null)
.commit();
Mais quand je le change en
getActivity().getFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.animator.card_flip_right_in, R.animator.card_flip_right_out,
R.animator.card_flip_left_in, R.animator.card_flip_left_out)
.replace(R.id.content_fragment, new DaysSinceBirthSettingFragment())
.addToBackStack(null)
.commit();
Cela fonctionne parfaitement. mais j'ai besoin de supporter une version plus ancienne, donc je dois utiliser support-v4, dont getSupportFragmentManager()
vient.
J'ai lu un article disant que res/animator
N'est pas pris en charge par support-v4, j'ai donc également essayé de déplacer mes fichiers XML d'animation dans le dossier res/anim
Et de le référencer par R.anim.card_flip_right_in
Mais ça n'a toujours pas fonctionné, n'importe qui peut me dire ce que je peux faire?
Le gestionnaire de fragments de support ne prend pas en charge les animateurs (uniquement les animations). Le message d'exception indique que vous avez un format d'animation incorrect dans votre ressource xml, probablement parce que vous avez déplacé l'animateur vers ce xml qui est incorrect (car ils ont une notation différente). Vous devez l'écrire de manière appropriée: http://developer.Android.com/guide/topics/graphics/view-animation.html
si vous utilisez un fragment de support, ajoutez les fichiers xml ci-dessous dans res
Voici le contenu du fichier anim/fragment_slide_left_enter.xml.
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="100%p"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toXDelta="0%p" />
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="0.0"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toAlpha="1.0" />
</set>
voici le contenu de anim/fragment_slide_left_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="0%p"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toXDelta="-100%p" />
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="1.0"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toAlpha="0.0" />
</set>
Le code suivant sera le contenu du fichier anim/fragment_slide_right_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="-100%p"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toXDelta="0%p" />
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="0.0"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toAlpha="1.0" />
</set>
le code suivant sera le contenu du fichier anim/fragment_slide_right_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="0%p"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toXDelta="100%p" />
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="1.0"
Android:interpolator="@Android:interpolator/decelerate_quint"
Android:toAlpha="0.0" />
</set>
ajoutez enfin cette ligne dans votre code de transition de fragment
ft.setCustomAnimations(R.anim.fragment_slide_left_enter,
R.anim.fragment_slide_left_exit,
R.anim.fragment_slide_right_enter,
R.anim.fragment_slide_right_exit)