2015-12-15 9 views
25

私のSDKを最新のバージョンに更新しましたが、今ではリントエラーが発生しています。予想されるタイプのアニメーターのリソース[ResourceType]

Error: Expected resource of type 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" /> 

それは常に前に働いていました。なぜ私はそのエラーが発生しているのか誰かが説明できますか?

答えて

70

Animatorリソースを間違ったディレクトリに保存するとエラーが発生します。 AnimatorInflaterはどのフォルダに保存されているかにかかわらずxmlを読み込むことができるため、以前は動作しました。

  • R.anim.*res/anim/フォルダのリソースは、表示アニメーション用です。
  • R.animator.*/res/animator/のリソースはAnimatorsです。

だから/res/animator//res/anim/からあなたAnimatorリソースを移動エラーを修正します。


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

このようなエラーが発生した場合は、アノテーションを見て、間違っていることを理解することができます。例えばAnimatorInflaterloadAnimator()の実装は次のようになります。

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

idパラメータの@AnimatorRes注釈は唯一Animator資源がここに渡されなければならないことを示しています。あなたが@AnimatorResの文書を見れば、それは次のように読み取ります

Denotes that an integer parameter, field or method return value is expected to be an animator resource reference (e.g. android.R.animator.fade_in).

記述がすでにエラーを説明していない場合、その例は通常ありません;)

-2

あなたのbuild.gradleにこのコードを追加します。 (モジュール:アプリ):

android { 
    lintOptions { 
    disable "ResourceType" 
    } 
}