. android - анимация - плавное изменение цвета java
android - анимация - плавное изменение цвета java

android - анимация - плавное изменение цвета java

Анимация изменения цвета фонового изображения на Android (12)

В зависимости от того, как ваш взгляд получает свой цвет фона и как вы получаете целевой цвет, существует несколько разных способов сделать это.

В первых двух используется инфраструктура анимации Android .

  • В вашем представлении цвет фона определяется как значение argb в XML-файле.
  • Ранее у вашего представления был свой цвет, установленный view.setBackgroundColor()
  • Ваш вид имеет свой цвет фона, определенный в drawable, который НЕ ОПРЕДЕЛЕТ любые дополнительные свойства, такие как радиус удара или угол.
  • В вашем представлении есть цвет фона, определенный в чертеже, и вы хотите удалить любые дополнительные свойства, такие как ударные или угловые радиусы, помните, что удаление дополнительных свойств не будет анимировано.

Объектный аниматор работает, вызывая view.setBackgroundColor который заменяет определенный drawable, если это не экземпляр ColorDrawable , который он редко бывает. Это означает, что любые дополнительные фоновые свойства от выталкиваемого, как штрих или углы, будут удалены.

  • В вашем представлении есть цвет фона, определенный в drawable, который также устанавливает свойства, такие как штрих или угловые радиусы, и вы хотите изменить его на новый цвет, который определяется во время работы.
  • Ваше представление должно переключаться между двумя выделенными, которые были определены до развертывания.

У меня были некоторые проблемы с производительностью с помощью переходов, которые выполняются, когда я открываю DrawerLayout, который мне не удалось решить, поэтому, если вы столкнулись с каким-либо неожиданным заиканием, вы, возможно, столкнулись с той же ошибкой, что и у меня.

Вам нужно будет изменить пример Value Animator, если вы хотите использовать extractable StateLists или LayerLists drawable , иначе он выйдет из строя на final GradientDrawable background = (GradientDrawable) view.getBackground(); линия.

Создайте и используйте ObjectAnimator следующим образом.

Вы также можете загрузить определение анимации из xml с помощью AnimatorInflater, например XMight, в Android-объекте ObjectAnimator animate backgroundColor Layout

Создайте и используйте ValueAnimator следующим образом:

Используйте TransitionDrawable следующим образом:

Вы можете отменить анимацию, вызвав .reverse() в экземпляре анимации.

Существуют и другие способы анимации, но эти три, вероятно, являются наиболее распространенными. Обычно я использую ValueAnimator.

Как вы можете изменить цвет фона на Android?

У меня есть вид с красным цветом фона. Цвет фона в представлении меняется на синий. Как я могу сделать плавный переход между цветами?

Если это невозможно сделать с помощью представлений, альтернатива будет приветствоваться.

Вот хорошая функция, которая позволяет:

Вы можете использовать новую анимацию свойств Animation для цветной анимации:

Для обратной совместимости с Android 2.x используйте библиотеку Nine Old Androids от Jake Wharton.

Метод getColor устарел в Android M, поэтому у вас есть два варианта:

Если вы используете библиотеку поддержки, вам необходимо заменить вызовы getColor :

если вы не используете библиотеку поддержки, вам необходимо заменить вызовы getColor :

Вы можете создать аниматор объектов. Например, у меня есть targetView, и я хочу изменить цвет фона:

Если вам нужна цветовая анимация,

этот код поможет вам:

Еще один простой способ добиться этого - вывести затухание с помощью AlphaAnimation.

  1. Сделайте свой просмотр ViewGroup
  2. Добавьте к нему дочерний вид с индексом 0, с параметрами макета match_parent
  3. Дайте ребенку тот же фон, что и контейнер
  4. Изменение фона контейнера на целевой цвет
  5. Затухайте ребенка, используя AlphaAnimation.
  6. Удалите ребенка после завершения анимации (используя AnimationListener)

Ответ дается многими способами. Вы также можете использоватьArgb ofArgb(startColor,endColor) ValueAnimator .

Это метод, который я использую в базовой операции для изменения фона. Я использую GradientDrawables, сгенерированный в коде, но может быть адаптирован для удовлетворения.

update: В случае, если кто-то работает с той же проблемой, я обнаружил, что по какой-то причине Android <4.3 с использованием setCrossFadeEnabled(true) вызывает нежелательный эффект белого, поэтому мне пришлось переключиться на сплошной цвет для <4.3 с использованием метода @Roman Minenok ValueAnimator выше.

Я обнаружил, что реализация, используемая ArgbEvaluator в исходном коде Android, лучше всего подходит для перехода цветов. При использовании HSV, в зависимости от двух цветов, переход проходил через слишком много оттенков для меня. Но этого метода нет.

Если вы пытаетесь просто оживить, используйте ArgbEvaluator с ValueAnimator как предлагается here :

Однако, если вы похожи на меня и хотите связать свой переход с каким-либо жестом пользователя или другим значением, переданным из ввода, ValueAnimator не очень помогает (если у вас нет таргетинга на API 22 и выше, в этом случае вы можете использовать ValueAnimator.setCurrentFraction() ). При таргетинге ниже API 22 оберните код, найденный в исходном коде ArgbEvaluator по вашему собственному методу, как показано ниже:

И используйте его, как хотите.

Я решил выяснить (довольно хорошее) решение этой проблемы!

Вы можете использовать TransitionDrawable для этого. Например, в файле XML в выпадающей папке вы можете написать что-то вроде:

Затем в вашем XML для фактического представления вы ссылаетесь на этот TransitionDrawable в атрибуте android:background .

На этом этапе вы можете инициировать переход во встроенной команде, выполнив следующие действия:

Или выполните переход в обратном порядке, позвонив:

См . Ответ Романа для другого решения с использованием API анимации свойств, который не был доступен в тот момент, когда этот ответ был первоначально опубликован.

📎📎📎📎📎📎📎📎📎📎