Android objectAnimator animate backgroundColor макета

У меня проблема. Я хочу анимировать цвет фона LinearLayout, используя ObjectAnimator. Проблема заключается в том, что она оживляет, но она не заботится о длительности, а не valueFrom и valueTo.

Это мой 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" />

В Java я вызываю следующее:

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

Обратите внимание, что когда я анимирую альфа макета, он работает так, как ожидалось.
Это ошибка Android (4.0.3 на Asus Transformer), или я что-то пропустил?

Ответ 1

Я немного погубился. Есть ответ. Попробуйте использовать TransitionDrawable. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Кроме того, есть тема где-то на stackoverflow.com, посвященный той же проблеме.

ДОПОЛНИТЕЛЬНЫЙ Пример кода:

    Button btn = (Button)this.findViewById(R.id.btn1);
    //Let change background 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);

Ответ 2

Кажется, это старая проблема. Я наткнулся на этот вопрос, имея аналогичную проблему.

В конце концов, это была просто ошибка в Android. Код должен работать, но AnimatorInflater просто промахивается при настройке оценщика.

Итак, установите TypeEvaluator после того, как инфляция снова сделает трюк.

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

Установите для new ArgbEvaluator() анимацию, как и предполагалось.