2012-06-19 10 views
10

Mam problem. Chcę ożywić kolor tła z LinearLayout, używając ObjectAnimator.
Problem polega na tym, że animuje się, ale nie dba o czas trwania ani o valueFrom i valueTo.Android objectAnimator animuj tłoKolor układu

To jest mój plik 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" /> 

W Javie nazywam to tak:

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

Zauważ, że kiedy animować alfa układzie, to działa zgodnie z oczekiwaniami.
Czy to błąd Androida (4.0.3 na Asus Transformer), czy coś mi brakuje?

+0

Co dzieje się dokładnie podczas próby animowania kolorów? – DeeV

+0

Prędkość animacji jest bardzo szybka i wygląda na to, że tło jest animowane wszystkimi możliwymi kolorami (jak losowy kolor). Widzę niebieski, czerwony, zielony, żółty, wszystko i bardzo szybko :) – XMight

+0

To nie działa, ponieważ między "liczbami" 0xFF0000 i 0x000000 są też inne podstawowe kolory 0x00FF00 i 0x0000FF, a także prawie każdy inny kolor. Ustaw swój kalkulator na programista/szesnastkowy, a zobaczysz, że połowa czerwieni jest rzeczywiście ciemnożółta, a nie ciemnoczerwona. – Combuster

Odpowiedz

37

I googled trochę. Jest odpowiedź. Spróbuj użyć TransitionDrawable. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Istnieje również temat gdzieś na stackoverflow.com poświęconym temu samemu problemowi.

przykład kod DODANO:

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

Wielkie dzięki, działa! – KinGPinG

+0

dziękuję !!!! chciałem zrobić pop na nowy kolor bg w widoku tekstowym i zaniknąć do czerni przy zmianie. wypróbowane wszystkie inne animacje. nawet deklaratywną wersję TransitionDrawable. ten zadziałał))) – tom

+0

dzięki! przydatne +1 –

12

Wydaje się, że stary problem. Natknąłem się na to pytanie, mając podobny problem.

Na koniec był to tylko błąd w systemie Android. Kod powinien działać, ale AnimatorInflater po prostu wpada w błąd przy ustawianiu oceniającego.

Ustawienie ponownie TypeEvaluator po inflacji znów dałoby rady.

Ustawiona na new ArgbEvaluator() animacja działa tak, jak powinna.

+0

Ta odpowiedź powinna być oznaczona jako rzeczywistą odpowiedzią, ponieważ rozwiązuje oryginalne pytanie natomiast odpowiedzi user1415536 ​​wykorzystuje alternatywne podejście do starszych obiektów. – ema3272

Powiązane problemy