Görünümünüzün arka plan rengini ve hedef renginizi nasıl aldığınıza bağlı olarak bunu yapmanın birkaç farklı yolu vardır.
İlk ikisi Android Mülkiyet Animasyonunu kullanıyor çerçevesini kullanıyor.
Aşağıdaki durumlarda bir Nesne Animatörü kullanın:
- Görünümünüzün arka plan rengi bir
argb
xml dosyasındaki değer .
- Görünümünüz daha önce rengini
view.setBackgroundColor()
- Görünümünüzün arka plan rengi , kontur veya köşe yarıçapları gibi ekstra özellikleri TANIMLAMAYAN bir çekmecede tanımlanmıştır .
- Görünümünüzün arka plan rengi çekilebilir olarak tanımlanmıştır ve kontur veya köşe yarıçapları gibi ekstra özellikleri kaldırmak istiyorsanız, ekstra özelliklerin kaldırılmasının animasyonlu olmayacağını unutmayın.
Nesne animatörü , nadiren olduğu view.setBackgroundColor
bir a örneği olmadıkça, tanımlanabilir çekilebilir olanın yerini alan çağrıyı yaparak çalışır ColorDrawable
. Bu, çizilebilir kontur veya köşeler gibi ekstra arka plan özelliklerinin kaldırılacağı anlamına gelir.
Aşağıdaki durumlarda bir Değer Animatörü kullanın:
- Görünümünüzün arka plan rengi, kontur veya köşe yarıçapları gibi özellikleri de ayarlayan bir çekmecede tanımlanmış ve bunu çalışırken kararlaştırılan yeni bir renge değiştirmek istiyorsunuz.
Aşağıdaki durumlarda çizilebilir bir Geçiş kullanın :
- Görünümünüz, dağıtımdan önce tanımlanmış iki çekilebilir cihaz arasında geçiş yapmalıdır.
Çözemediğim bir DrawerLayout'u açarken çalışan Geçiş çekmeceleri ile ilgili bazı performans sorunları yaşadım, bu yüzden beklenmedik kekemeyle karşılaşırsanız, benimle aynı hataya rastlamış olabilirsiniz.
Çizilebilir bir StateLists veya bir LayerLists drawable kullanmak istiyorsanız Value Animator örneğini değiştirmeniz gerekir , aksi takdirde final GradientDrawable background = (GradientDrawable) view.getBackground();
satırda kilitlenir .
Nesne Animatörü :
Tanımı görüntüle:
<View
android:background="#FFFF0000"
android:layout_width="50dp"
android:layout_height="50dp"/>
Bunun ObjectAnimator
gibi bir oluşturun ve kullanın .
final ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(view,
"backgroundColor",
new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
backgroundColorAnimator.setDuration(300);
backgroundColorAnimator.start();
Ayrıca XMight'ın Android nesnesinde yaptığı gibi bir AnimatorInflater kullanarak animasyon tanımını bir xml'den yükleyebilirsinizAnimator animate background
Değer Animatörü :
Tanımı görüntüle:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Çekilebilir tanım:
<?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>
Bunun gibi bir ValueAnimator oluşturun ve kullanın:
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();
Geçiş çekilebilir :
Tanımı görüntüle:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Çekilebilir tanım:
<?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'ı şu şekilde kullanın:
final TransitionDrawable background = (TransitionDrawable) view.getBackground();
background.startTransition(300);
.reverse()
Animasyon örneğini çağırarak animasyonları tersine çevirebilirsiniz .
Animasyon yapmanın başka yolları da var, ancak bu üçü muhtemelen en yaygın olanı. Genellikle bir ValueAnimator kullanıyorum.