预期的资源类型为动画 [ResourceType]

29

我已将我的SDK更新到最新版本,但是现在我遇到了一个lint错误。

错误:预期的资源类型为animator [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" />

以前一直都可以工作,为什么现在会出现错误?有人能解释一下吗?

2个回答

79

错误的原因是您将Animator资源存储在错误的目录中!之前可以正常工作,因为AnimatorInflater可以加载xml文件,无论保存在哪个文件夹中。

  • res/anim/文件夹中的R.anim.*资源用于视图动画。
  • res/animator/文件夹中的R.animator.*资源用于Animators

因此,要修复错误,只需将Animator资源从res/anim/移动到res/animator/


在支持库添加资源类型注释之前,这没有任何区别。除了这些注释外,还有许多新的Lint检查,其中包括导致您出错的检查。

将来,如果您遇到此类错误,可以查看注释以找出问题所在。例如,AnimatorInflaterloadAnimator()实现如下:

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)。

如果描述没有解释错误,那么通常示例会有所帮助 ;)


-1
将以下代码添加到您的 build.gradle(Module: app)文件中:

android {
  lintOptions {
    disable "ResourceType"
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接