Android objectAnimator анимация фона Цвет макета

У меня проблема. Я хочу оживить цвет фона 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), или я что-то упустил?


person XMight    schedule 19.06.2012    source источник
comment
Что именно происходит, когда вы пытаетесь оживить цвета?   -  person DeeV    schedule 19.06.2012
comment
Скорость анимации очень высокая, и похоже, что фон анимирован всеми возможными цветами (например, случайным цветом). Я вижу синий, красный, зеленый, желтый, все, и очень быстро :)   -  person XMight    schedule 19.06.2012
comment
Это не работает, потому что между числами 0xFF0000 и 0x000000 есть также другие основные цвета 0x00FF00 и 0x0000FF, а также почти все остальные цвета. Установите настольный калькулятор на программатор / шестнадцатеричный, и вы увидите, что половина красного на самом деле темно-желтая, а не темно-красная.   -  person Combuster    schedule 03.02.2014


Ответы (2)


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

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

ДОБАВЛЕНО Пример кода:

    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);
person user1415536    schedule 07.09.2012
comment
Спасибо!!!! просто хотел добавить новый цвет bg в текстовое изображение и вернуться к черному цвету при изменении. пробовал все остальные анимации. даже декларативная версия TransitionDrawable. этот сработал))) - person tom; 12.05.2016
comment
Ребята, у меня проблема, я сделал то же самое, но, похоже, не работает, под моим кодом: ColorDrawable [] color = {new ColorDrawable (ContextCompat.getColor (applicationContext, R.color.selectedcolor)), new ColorDrawable (ContextCompat. getColor (applicationContext, R.color.unselectedcolor))}; TransitionDrawable trans = новый TransitionDrawable (цвет); Holder.relativeLayout.setBackground (транс); trans.startTransition (5000); Цвета: ‹название цвета = выбранный цвет› # 6400B7C5 ‹/color› ‹название цвета = невыбранный цвет› # 00000000 ‹/color› - person Abduaziz Kayumov; 09.11.2017

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

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

Таким образом, установка TypeEvaluator после инфляции снова поможет.

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

Если установить значение new ArgbEvaluator(), анимация будет работать как положено.

person tynn    schedule 05.09.2014
comment
Этот ответ следует пометить как фактический ответ, потому что он решает исходный вопрос, в то время как ответ user1415536 ​​использует альтернативный подход со старыми объектами. - person ema3272; 03.03.2018
comment
Не могу найти путь R.animator.animator_bkg. Придется ли мне самому проложить этот путь или мне нужно что-то скачать? - person Daniëlle; 26.02.2021
comment
@ Daniëlle animator_bkg - аниматор, которого использовал автор. Поэтому вам нужно создать свой собственный XML-ресурс и использовать его вместо этого. - person tynn; 26.02.2021