Подтвердить что ты не робот

Ожидаемый ресурс аниматора типа [ResourceType]

Я обновил свой SDK до последней версии, но теперь я получаю ошибку lint.

Ошибка: ожидаемый ресурс аниматора типа [ResourceType]

Ошибка в этой строке:

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

Указанный ресурс /res/anim/right_slide_in.xml выглядит следующим образом:

<?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" />

Он всегда работал раньше. Может кто-нибудь объяснить, почему я получаю эту ошибку?

4b9b3361

Ответ 1

Ошибка возникает из-за того, что вы храните свои ресурсы Animator в неправильном каталоге! Он работал раньше, поскольку AnimatorInflater может загружать xml независимо от того, в какой папке он сохраняется.

  • Ресурсы
  • R.anim.* из папки res/anim/ предназначены для просмотра анимации.
  • R.animator.* ресурсы из папки /res/animator/ предназначены для Animators.

Итак, чтобы исправить ошибку, просто переместите ресурсы Animator с /res/anim/ на /res/animator/.


Это обычно не имеет никакого значения, пока аннотации типа ресурса не будут добавлены в библиотеку поддержки. Долгое время с этими аннотациями также было много новых чехлов, среди которых была и та, которая вас подвела.

В будущем, если вы получите такую ​​ошибку, вы можете посмотреть аннотацию, чтобы выяснить, что вы делаете неправильно. Например, реализация loadAnimator() для AnimatorInflater выглядит так:

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

Аннотация @AnimatorRes в параметре id указывает, что здесь должны быть переданы только ресурсы Animator. Если вы посмотрите документацию @AnimatorRes, он читается следующим образом:

Обозначает, что возвращаемое значение целочисленного параметра, поля или метода как ожидается, будет ссылкой ресурса аниматора (например, android.R.animator.fade_in).

Если описание уже не объясняет ошибку, то пример обычно делает;)

Ответ 2

Просто для подведения итогов решения.

Например: blink.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="600"
        android:repeatMode="reverse"
        android:repeatCount="infinite"/>
    </set>

Он должен быть в res/anim

И должен быть доступ как R.anim.blink в вашем java файле