2012-06-19 4 views
10

Ich habe ein Problem. Ich möchte animieren die Hintergrundfarbe eines LinearLayout, mit ObjectAnimator.
Das Problem ist, dass es animiert, aber es kümmert sich weder um Dauer noch valueFrom und valueTo.Android objectAnimator animieren backgroundColor des Layouts

Dies ist meine XML-Datei:

<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 ich so nennen:

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

Beachten Sie, dass, wenn ich das Alpha des Layouts animieren, es funktioniert wie erwartet.
Ist das ein Android-Bug (4.0.3 auf Asus Transformer), oder ich vermisse etwas?

+0

Was passiert genau, wenn Sie versuchen, die Farben zu animieren? – DeeV

+0

Die Animationsgeschwindigkeit ist sehr schnell und es sieht so aus, als wäre der Hintergrund mit allen möglichen Farben animiert (wie eine zufällige Farbe). Ich sehe blau, rot, grün, gelb, alles und sehr schnell :) – XMight

+0

Das funktioniert nicht, denn zwischen der "Zahl" 0xFF0000 und 0x000000 gibt es auch die anderen Primärfarben 0x00FF00 und 0x0000FF, und so ziemlich jede andere Farbe. Setzen Sie Ihren Desktop-Rechner auf Programmierer/Hexadezimal, und Sie werden sehen, dass die Hälfte von Rot tatsächlich dunkel gelb statt dunkelrot ist. – Combuster

Antwort

37

Ich googelte ein bisschen. Es gibt eine Antwort. Versuchen Sie TransitionDrawable zu verwenden. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Außerdem gibt es irgendwo auf stackoverflow.com ein Thema, das demselben Problem gewidmet ist.

ADDED Code-Beispiel:

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

Vielen Dank, es funktioniert! – KinGPinG

+0

danke !!!! wollte nur einen Pop zu neuen bg Farbe auf Textview und verblassen zurück zu schwarz bei Änderung. versuchte alle anderen Animationen. sogar eine deklarative Version von TransitionDrawable. dieser hat funktioniert))) – tom

+0

danke! nützlich +1 –

12

Es scheint ein altes Thema. Ich bin bei einem ähnlichen Problem auf diese Frage gestoßen.

Am Ende war es nur ein Fehler in Android. Der Code soll funktionieren, aber der AnimatorInflater stolpert einfach beim Einstellen des Evaluators.

So die TypeEvaluator nach der Inflation wieder tun würde den Trick tun.

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

Eingestellt auf new ArgbEvaluator() funktioniert die Animation wie beabsichtigt.

+0

Diese Antwort sollte als die eigentliche Antwort gekennzeichnet werden, weil es die ursprüngliche Frage löst, während die Antwort des user1415536 ​​ein verwendet alternativer Ansatz mit älteren Objekten. – ema3272