2012-06-19 15 views
10

Tengo un problema. Quiero animar el color de fondo de LinearLayout, usando ObjectAnimator.
El problema es que anima, pero no le importa la duración ni valueFrom y valueTo.Android objectAnimator animate backgroundColor of Layout

Este es mi archivo xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="2000" 
    android:propertyName="backgroundColor" 
    android:repeatCount="infinite" 
    android:repeatMode="reverse" 
    android:valueFrom="#FF0000" 
    android:valueTo="#000000" /> 

En Java que llamo así:

ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg); 
objAnim.setTarget(view); 
objAnim.start(); 

Tenga en cuenta que cuando me animo el alfa de la disposición, que funciona como se espera.
¿Es esto un error de Android (4.0.3 en Asus Transformer), o extraño algo?

+0

¿Qué sucede exactamente cuando intentas animar los colores? – DeeV

+0

La velocidad de animación es muy rápida, y parece que el fondo está animado con todos los colores posibles (como un color aleatorio). Veo azul, rojo, verde, amarillo, todo, y muy rápido :) – XMight

+0

Esto no funciona porque entre el "número" 0xFF0000 y 0x000000 también están los otros colores primarios 0x00FF00 y 0x0000FF, y casi todos los demás colores también. Configure su calculadora de escritorio como programador/hexadecimal, y verá que la mitad de rojo es realmente amarillo oscuro en lugar de rojo oscuro. – Combuster

Respuesta

37

Busqué en Google un poco. Hay una respuesta Intenta usar TransitionDrawable. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Además, hay un tema en algún lugar de stackoverflow.com dedicado al mismo problema.

ejemplo del Código añadió:

Button btn = (Button)this.findViewById(R.id.btn1); 
    //Let's change background's color from blue to red. 
    ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)}; 
    TransitionDrawable trans = new TransitionDrawable(color); 
    //This will work also on old devices. The latest API says you have to use setBackground instead. 
    btn.setBackgroundDrawable(trans); 
    trans.startTransition(5000); 
+0

Muchas gracias, ¡funciona! – KinGPinG

+0

gracias !!!! Solo quería hacer un pop al nuevo color bg en la vista de texto y volver a cambiar a negro en el cambio. intenté todas las otras animaciones. incluso una versión declarativa de TransitionDrawable. este funcionó))) – tom

+0

gracias! útil +1 –

12

Parece ser una cuestión de edad. Me encontré con esta pregunta mientras tenía un problema similar.

Al final solo fue un error en Android. Se supone que el código funciona, pero el AnimatorInflater simplemente comete errores al configurar el evaluador.

Configurar el TypeEvaluator después del inflado de nuevo haría el truco.

ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg); 
    objAnim.setTarget(view); 
    objAnim.setEvaluator(new ArgbEvaluator()); 
    objAnim.start(); 

Establecer en new ArgbEvaluator() la animación funciona como estaba previsto.

+0

Esta respuesta debe ser marcado como la respuesta real porque resuelve el problema original, mientras que la respuesta de la user1415536 ​​utiliza una enfoque alternativo con objetos más antiguos. – ema3272