2015-12-15 14 views
25

Ho aggiornato il mio SDK alla versione più recente, ma ora ricevo un errore di sfilacciamento.Risorsa prevista di tipo animatore [ResourceType]

Error: Expected resource of type animator [ResourceType]

l'errore si verifica su questa linea:

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

la risorsa di riferimento /res/anim/right_slide_in.xml assomiglia a questo:

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

E 'sempre funzionato prima. Qualcuno potrebbe spiegare perché sto ottenendo quell'errore?

risposta

70

L'errore si verifica perché le risorse Animator si memorizzano nella directory errata! Ha funzionato prima perché il AnimatorInflater può caricare l'xml indipendentemente dalla cartella in cui è stato salvato.

  • R.anim.* risorse della cartella res/anim/ sono per le animazioni di visualizzazione.
  • R.animator.* risorse dalla cartella /res/animator/ sono per Animators.

Quindi, per correggere l'errore basta spostare il Animator risorse da /res/anim/ a /res/animator/.


Questo non ha fatto alcuna differenza finché le annotazioni sul tipo di risorsa non sono state aggiunte alla libreria di supporto. A lungo con quelle annotazioni c'erano anche molti nuovi controlli sui pelucchi, tra cui quello che ti inciampava.

In futuro se si verifica un errore come questo è possibile esaminare l'annotazione per capire cosa si sta facendo male. Per esempio l'attuazione loadAnimator() del AnimatorInflater si presenta così:

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

La @AnimatorRes annotazione sul parametro id indica che solo Animator risorse dovrebbero essere passati qui. Se si guarda la documentazione di @AnimatorRes si legge come questo:

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

Se la descrizione non spiega già l'errore, quindi l'esempio di solito fa;)

-2

Aggiungi questo codice al vostro build.gradle (Modulo: app):

android { 
    lintOptions { 
    disable "ResourceType" 
    } 
}