Recursos esperados del tipo animator
He actualizado mi SDK a la versión más reciente, pero ahora estoy recibiendo un error de pelusa.
Error: recurso esperado del tipo animator [ResourceType]
- Advertencia: Este <FrameLayout> se puede reemplazar con una etiqueta <merge>
- Hacer tema personalizado usar fondo nulo (sugerencia de pelusa Android)
- Cómo reactivar una advertencia de Android Lint deshabilitada en el nivel de archivo
- ¿Qué es "android: allowBackup"?
- Suprimir "Identificador no permitido en Android"
El error se produce en esta línea:
AnimatorInflater.loadAnimator(context, R.anim.right_slide_in)
El recurso referenciado /res/anim/right_slide_in.xml
tiene este aspecto:
<?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" />
Siempre funcionaba antes. ¿Podría alguien explicar por qué estoy recibiendo ese error?
- Esta clase de controlador debe ser estática o pueden producirse fugas: IncomingHandler
- Lint se queja de que no se ha traducido la cadena gcm_defaultSenderId
- Actividad no registrada en el manifiesto Aviso de pelusa
- Lint: ¿Cómo ignorar los errores "<key> no se traduce en <language>"?
- ¿Por qué se considera 0dp una mejora de rendimiento?
- ¿Por qué ContextThemeWrapper está ahora restringido al grupo Support Library?
- Cómo solucionar esto: 'Running android lint' issue
- Advertencias en los recursos xml
El error se produce porque almacena los recursos de Animator
en el directorio incorrecto. Funcionó antes porque el AnimatorInflater
puede cargar el xml independientemente de en qué carpeta se guarda.
-
R.anim.*
recursos de la carpetares/anim/
son para ver animaciones. -
R.animator.*
recursos de la carpeta/res/animator/
son paraAnimators
.
Así que para corregir el error simplemente mueva sus recursos de Animator
de /res/anim/
to /res/animator/
.
Esto no hacía ninguna diferencia en absoluto hasta que las anotaciones de tipo de recurso se agregaron a la biblioteca de soporte. Un largo con esas anotaciones allí también eran muchos cheques nuevos de la pelusa entre otros el que le tropezó.
En el futuro, si recibe un error como este, puede ver la anotación para averiguar qué está haciendo mal. Por ejemplo, la implementación de loadAnimator()
de AnimatorInflater
ve así:
public static Animator loadAnimator(Context context, @AnimatorRes int id) throws NotFoundException { return loadAnimator(context.getResources(), context.getTheme(), id); }
La anotación @AnimatorRes
en el parámetro id indica que sólo los recursos de Animator
deben pasar aquí. Si miras la documentación de @AnimatorRes
se lee así:
Indica que se espera que un valor de retorno de parámetro, campo o método de número entero sea una referencia de recurso de animador (por ejemplo, android.R.animator.fade_in).
Si la descripción ya no explica el error, entonces normalmente lo hace el ejemplo;)
Sólo para resumir la solución.
Por ejemplo: blink.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:duration="600" android:repeatMode="reverse" android:repeatCount="infinite"/> </set>
Debe estar en el directorio res / anim
Y debe ser el acceso como R.anim.blink en su archivo java