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]
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?
- Herramienta Lint de Android SDK Ignorar las nuevas advertencias de API
- Cómo detectar errores de variables de recursos en Android Studio (por ejemplo: "% 1 $ s")
- Cómo corregir Advertencia de pelusa de SMS BroadcastReceiver sin protección
- Esta clase de controlador debe ser estática o pueden producirse fugas: IncomingHandler
- Actividad no registrada en el manifiesto Aviso de pelusa
- Cómo solucionar esto: 'Running android lint' issue
- ¿Se ha utilizado erróneamente un nombre de paquete mixto en una aplicación ya implementada? ¿Puedo cambiarlo a minúsculas?
- ¿Cómo el ajuste baselineAligned a false mejora el rendimiento en LinearLayout?
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