web-dev-qa-db-fra.com

Ressource attendue de type animateur [ResourceType]

J'ai mis à jour mon SDK vers la dernière version, mais maintenant je reçois une erreur de peluche.

Erreur: ressource attendue de type animateur [ResourceType]

L'erreur se produit sur cette ligne:

AnimatorInflater.loadAnimator(context, R.anim.right_slide_in)

La ressource référencée /res/anim/right_slide_in.xml ressemble à ça:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:interpolator="@Android:anim/linear_interpolator"
    Android:valueTo="0"
    Android:valueFrom="1.0"
    Android:propertyName="xFraction"
    Android:valueType="floatType"
    Android:duration="450" />

Cela a toujours fonctionné avant. Quelqu'un pourrait-il expliquer pourquoi je reçois cette erreur?

26
Marcin Kunert

L'erreur se produit car vous stockez vos ressources Animator dans le mauvais répertoire! Cela fonctionnait auparavant parce que le AnimatorInflater peut charger le xml quel que soit le dossier dans lequel il est enregistré.

  • Les ressources R.anim.* Du dossier res/anim/ Sont destinées à visualiser les animations.
  • R.animator.* Les ressources du dossier /res/animator/ Sont pour Animators.

Donc, pour corriger l'erreur, déplacez simplement vos Animator ressources de /res/anim/ Vers /res/animator/.


Cela ne faisait aucune différence jusqu'à ce que les annotations de type de ressource soient ajoutées à la bibliothèque de support. Un long avec ces annotations, il y avait aussi de nombreux nouveaux contrôles de peluches parmi ceux qui vous ont fait trébucher.

À l'avenir, si vous obtenez une erreur comme celle-ci, vous pouvez consulter l'annotation pour comprendre ce que vous faites mal. Par exemple, l'implémentation de loadAnimator() de AnimatorInflater ressemble à ceci:

public static Animator loadAnimator(Context context, @AnimatorRes int id)
        throws NotFoundException {
    return loadAnimator(context.getResources(), context.getTheme(), id);
}

L'annotation @AnimatorRes Sur le paramètre id indique que seules les ressources Animator doivent être passées ici. Si vous regardez la documentation de @AnimatorRes, Elle se lit comme suit:

Indique qu'un paramètre entier, un champ ou une valeur de retour de méthode devrait être une référence de ressource d'animateur (par exemple Android.R.animator.fade_in).

Si la description n'explique pas déjà l'erreur, alors l'exemple le fait généralement;)

75
Xaver Kapeller