Tergantung pada bagaimana tampilan Anda mendapatkan warna latar belakang dan bagaimana Anda mendapatkan warna target Anda ada beberapa cara berbeda untuk melakukan ini.
Dua yang pertama menggunakan kerangka Animasi Properti Android .
Gunakan Obyek Animator jika:
- Tampilan Anda memiliki warna latar belakang yang ditentukan sebagai
argb
nilai dalam file xml.
- Tampilan Anda sebelumnya telah diatur warnanya oleh
view.setBackgroundColor()
- Tampilan Anda memiliki warna latar belakang yang ditentukan dalam gambar yang TIDAK TIDAK mendefinisikan properti tambahan seperti jari atau sudut radio.
- Tampilan Anda memiliki warna latar belakang yang ditentukan dalam gambar dan Anda ingin menghapus properti tambahan seperti stroke atau sudut radio, perlu diingat bahwa penghapusan properti tambahan tidak akan dianimasikan.
Objek animator bekerja dengan memanggil view.setBackgroundColor
yang menggantikan drawable yang didefinisikan kecuali apakah itu instance dari a ColorDrawable
, yang jarang ada. Ini berarti bahwa setiap properti latar belakang tambahan dari stroke atau sudut yang dapat digambar akan dihapus.
Gunakan Animator Nilai jika:
- Tampilan Anda memiliki warna latar belakang yang ditentukan dalam drawable yang juga mengatur properti seperti stroke atau sudut radio DAN Anda ingin mengubahnya menjadi warna baru yang diputuskan saat berjalan.
Gunakan gambar Transisi jika:
- Tampilan Anda harus beralih di antara dua drawable yang telah ditentukan sebelum penerapan.
Saya telah mengalami beberapa masalah kinerja dengan drawables Transition yang berjalan saat saya membuka DrawerLayout yang belum bisa saya selesaikan, jadi jika Anda menemukan kegagapan yang tidak terduga, Anda mungkin mengalami bug yang sama seperti saya.
Anda harus mengubah contoh Value Animator jika Anda ingin menggunakan drawable StateLists atau LayerLists drawable , jika tidak maka ia akan crash pada final GradientDrawable background = (GradientDrawable) view.getBackground();
baris.
Obyek Animator :
Lihat definisi:
<View
android:background="#FFFF0000"
android:layout_width="50dp"
android:layout_height="50dp"/>
Buat dan gunakan yang ObjectAnimator
seperti ini.
final ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(view,
"backgroundColor",
new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
backgroundColorAnimator.setDuration(300);
backgroundColorAnimator.start();
Anda juga dapat memuat definisi animasi dari xml menggunakan AnimatorInflater seperti XMight di objek AndroidAnimator menghidupkan latar belakangWarna Layout
Nilai Animator :
Lihat definisi:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Definisi yang dapat digambar:
<?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>
Buat dan gunakan ValueAnimator seperti ini:
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();
Dapat ditarik transisi :
Lihat definisi:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Definisi yang dapat digambar:
<?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>
Gunakan TransitionDrawable seperti ini:
final TransitionDrawable background = (TransitionDrawable) view.getBackground();
background.startTransition(300);
Anda dapat membalikkan animasi dengan memanggil .reverse()
instance animasi.
Ada beberapa cara lain untuk melakukan animasi tetapi ketiganya mungkin yang paling umum. Saya biasanya menggunakan ValueAnimator.