Ответ 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).
Если описание уже не объясняет ошибку, то пример обычно делает;)