web-dev-qa-db-ja.com

タイプanimator [ResourceType]の期待されるリソース

SDKを最新バージョンに更新しましたが、今ではリントエラーが発生しています。

エラー:タイプ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" />

以前は常に機能していました。なぜ私がそのエラーを受け取っているのか誰かが説明できますか?

26
Marcin Kunert

Animatorリソースを間違ったディレクトリに保存するため、エラーが発生します! AnimatorInflaterは保存するフォルダーに関係なくxmlをロードできるため、以前は機能していました。

  • _R.anim.*_フォルダーの_res/anim/_リソースは、ビューアニメーション用です。
  • _R.animator.*_フォルダーの_/res/animator/_リソースは、Animators用です。

したがって、エラーを修正するには、Animatorリソースを_/res/anim/_から_/res/animator/_に移動するだけです。


これは、リソースタイプの注釈がサポートライブラリに追加されるまで、まったく違いはありませんでした。長い間、これらの注釈には、多くの新しいリントチェックもありました。

将来、このようなエラーが発生した場合は、注釈を見て、何が間違っているのかを把握できます。たとえば、AnimatorInflaterloadAnimator()の実装は次のようになります。

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

Idパラメータの_@AnimatorRes_注釈は、Animatorリソースのみをここに渡す必要があることを示します。 _@AnimatorRes_のドキュメントを見ると、次のようになっています。

整数のパラメーター、フィールド、またはメソッドの戻り値は、アニメーターリソース参照(Android.R.animator.fade_inなど)であることが期待されることを示します。

説明でまだエラーが説明されていない場合、例では通常説明しています;)

75
Xaver Kapeller