2015-12-15 55 views
25

我已經更新我的SDK到最新版本,但現在我得到一個lint錯誤。預期資源的類型動畫師[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

所以要修正這個錯誤只動Animator資源從/res/anim//res/animator/


在資源類型註釋添加到支持庫之前,這一直沒有任何區別。長久以來,這些註釋中還有許多新的皮棉檢查,其中包括絆倒你的皮毛檢查。

未來,如果您遇到像這樣的錯誤,您可以查看註釋以找出您做錯的地方。例如的AnimatorInflaterloadAnimator()實施看起來是這樣的:

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

@AnimatorRes註釋上的ID參數表明僅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 (Module:app):

android { 
    lintOptions { 
    disable "ResourceType" 
    } 
}