2015-12-15 15 views
25

Zaktualizowałem mój pakiet SDK do najnowszej wersji, ale teraz otrzymuję komunikat o błędzie.Oczekiwany zasób animatora typu [ResourceType]

Error: Expected resource of type animator [ResourceType]

Błąd występuje na tej linii:

AnimatorInflater.loadAnimator(context, R.anim.right_slide_in) 

Odnośny zasób /res/anim/right_slide_in.xml wygląda następująco:

<?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" /> 

Zawsze pracował wcześniej. Czy ktoś mógłby wyjaśnić, dlaczego dostaję tego błędu?

Odpowiedz

70

Błąd występuje, ponieważ przechowujesz swoje zasoby Animator w niewłaściwym katalogu! To działało wcześniej, ponieważ AnimatorInflater może załadować xml bez względu na to, w którym folderze jest zapisany.

  • R.anim.* Zasoby z folderu res/anim/ są przeznaczone do wyświetlania animacji.
  • zasobów z folderu /res/animator/ są dla Animators.

Tak, aby naprawić błąd po prostu przenieść Animator zasobów z /res/anim/ do /res/animator/.


Nie miało to żadnej różnicy, dopóki adnotacje typu zasobów nie zostały dodane do biblioteki pomocy. Długo z tymi adnotacjami tam też było wiele nowych kontroli kłód, między innymi ta, która cię potknęła.

W przyszłości, jeśli pojawi się taki błąd, można przejrzeć adnotację, aby dowiedzieć się, co robisz źle. Na przykład realizacja loadAnimator() z AnimatorInflater wygląda następująco:

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

@AnimatorRes adnotacji na parametr id wskazuje, że tylko Animator zasoby powinny być przekazywane tutaj. Jeśli spojrzeć na dokumentacji @AnimatorRes to brzmi tak:

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

Jeśli opis nie wyjaśnia już błąd, to przykład zwykle robi;)

-2

Dodaj ten kod do swojej build.gradle (Moduł: aplikacja):

android { 
    lintOptions { 
    disable "ResourceType" 
    } 
} 
Powiązane problemy