Залежно від того, як ваш погляд набуває фоновий колір і як ви отримуєте цільовий колір, існує кілька різних способів зробити це.
Перші два використовують анімацію власності Android рамки .
Використовуйте аніматор об'єктів, якщо:
- Колір тла перегляду визначається як
argb
значення у файлі xml.
- Раніше ваш колір перегляду визначав колір
view.setBackgroundColor()
- Колір тла перегляду визначається кольором фонового рисунка, який НЕ визначає додаткових властивостей, таких як радіус обведення або кута.
- Колір тла перегляду визначається кольором фонового рисунка, і ви хочете видалити будь-які додаткові властивості, наприклад, радіуси обведення або кута, пам’ятайте, що видалення додаткових властивостей не буде анімовано.
Аніматор об'єкта працює за допомогою виклику, view.setBackgroundColor
який замінює визначений графічний малюнок, за винятком випадків ColorDrawable
, коли це рідко. Це означає, що будь-які зайві фонові властивості з такого малювання, як штрих або кути будуть видалені
Використовуйте аніматор значення, якщо:
- Колір тла перегляду визначено кольором фонового рисунка, який також встановлює такі властивості, як радіуси обведення або кута, і ви хочете змінити його на новий колір, який вирішується під час запуску.
Використовуйте перехідну схему, якщо:
- Ваш погляд повинен перемикатися між двома чертежними, які були визначені до розгортання.
У мене виникли деякі проблеми з роботою з перетяжками переходу, яка працює під час відкриття DrawerLayout, яку мені не вдалося вирішити, тому, якщо ви зіткнетесь із несподіваним заїканням, ви могли зіткнутися з тією ж помилкою, що і я.
Вам потрібно буде змінити приклад Value Animator, якщо ви хочете використовувати StateLists, що малюється, або LayerLists, що малюється , інакше він вийде з final GradientDrawable background = (GradientDrawable) view.getBackground();
ладу на лінії.
Аніматор об’єктів :
Перегляд визначення:
<View
android:background="#FFFF0000"
android:layout_width="50dp"
android:layout_height="50dp"/>
Створіть і використовуйте ObjectAnimator
подібне.
final ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(view,
"backgroundColor",
new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
backgroundColorAnimator.setDuration(300);
backgroundColorAnimator.start();
Ви також можете завантажити визначення анімації з xml за допомогою AnimatorInflater, як XMight в об’єкті AndroidАніматор анімації фонуColor of Layout
Значення аніматора :
Перегляд визначення:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Мальоване визначення:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
Створіть і використовуйте ValueAnimator так:
final ValueAnimator valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
final GradientDrawable background = (GradientDrawable) view.getBackground();
currentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(final ValueAnimator animator) {
background.setColor((Integer) animator.getAnimatedValue());
}
});
currentAnimation.setDuration(300);
currentAnimation.start();
Перехід доступний :
Перегляд визначення:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Мальоване визначення:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
<item>
<shape>
<solid android:color="#78c5f9"/>
<stroke
android:color="#68aff4"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
</transition>
Використовуйте TransitionDrawable так:
final TransitionDrawable background = (TransitionDrawable) view.getBackground();
background.startTransition(300);
Ви можете скасувати анімацію, зателефонувавши .reverse()
до екземпляра анімації.
Є деякі інші способи зробити анімацію, але ці три, мабуть, є найбільш поширеними. Я зазвичай використовую ValueAnimator.