2012-06-19 14 views
10

Ho un problema. Voglio animare il colore di sfondo di un LinearLayout, utilizzando ObjectAnimator.
Il problema è che si anima, ma non interessa né la durata né valueFrom e valueTo.Oggetto Android Animatore sfondo animatoColore del layout

Questo è il mio file 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" /> 

In Java chiamo così:

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

Nota che quando ho animare l'alfa del layout, esso funziona come previsto.
Si tratta di un bug di Android (4.0.3 su Asus Transformer) o mi manca qualcosa?

+0

Cosa succede esattamente quando si tenta di animare i colori? – DeeV

+0

La velocità di animazione è molto veloce e sembra che lo sfondo sia animato con tutti i colori possibili (come un colore casuale). Vedo blu, rosso, verde, giallo, tutto e molto veloce :) – XMight

+0

Questo non funziona perché tra il "numero" 0xFF0000 e 0x000000 ci sono anche gli altri colori primari 0x00FF00 e 0x0000FF, e praticamente anche tutti gli altri colori. Imposta la calcolatrice desktop su programmatore/esadecimale e vedrai che metà del rosso è in realtà giallo scuro anziché rosso scuro. – Combuster

risposta

37

Ho cercato su Google un po '. C'è una risposta. Prova ad usare TransitionDrawable. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Inoltre, c'è un argomento da qualche parte su stackoverflow.com dedicato allo stesso problema.

codice aggiunto esempio:

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

Grazie mille, funziona! – KinGPinG

+0

grazie !!!! volevo solo fare un pop a new bg color su textview e svanire di nuovo sul nero. provato tutte le altre animazioni. anche una versione dichiarativa di TransitionDrawable. questo ha funzionato))) – tom

+0

grazie! utile +1 –

12

Sembra essere un vecchio problema. Mi sono imbattuto in questa domanda pur avendo un problema simile.

Alla fine era solo un bug in Android. Il codice dovrebbe funzionare, ma l'AnimatorInflater è solo un errore quando si imposta il programma di valutazione.

Quindi impostare il TypeEvaluator dopo l'inflazione di nuovo avrebbe fatto il trucco.

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

Impostare su new ArgbEvaluator() l'animazione funziona come previsto.

+0

Questa risposta dovrebbe essere contrassegnato come la risposta reale perché risolve la domanda originale, mentre la risposta del user1415536 ​​utilizza un approccio alternativo con oggetti più vecchi. – ema3272

Problemi correlati