Saya memiliki animasi fadeout dalam tampilan (yang berada di dalam fragmen), dan setiap kali animasi terjadi, setelah selesai tampilan menggambar ulang sendiri lagi. Saya menemukan pekerjaan sambil melakukan view.SetVisibility(View.GONE)
. Tapi itu tidak menunggu animasinya selesai. Saya ingin mengeksekusi kode setVisibility ini hanya setelah animasi selesai. Apa cara terbaik untuk melakukannya?
android
android-fragments
android-animation
Paulo Barros
sumber
sumber
Jawaban:
Anda dapat menambahkan pendengar Animasi ke objek animasi Anda seperti
anim.setAnimationListener(new Animation.AnimationListener(){ @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { } });
sumber
if (!anim.hasStarted() || anim.hasEnded())
untuk mendeteksi apakah animasi masih berjalan.Secara fungsional sama dengan jawaban yang diterima tetapi dengan cara yang jauh lebih ringkas:
/* Add/Remove any animation parameter */ theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() { @Override public void run() { theView.setVisibility(View.GONE); } });
Nikmati :)
sumber
.withEndAction(() -> theView.setVisibility(View.GONE));
Anda juga dapat mencapai ini menggunakan Animation.setFillAfter
sumber
Cukup ambil objek animasi Anda dan tambahkan pendengar animasi ke dalamnya. Berikut adalah contoh kode:
rotateAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub **// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION** } });
sumber
Contoh untuk Kotlin
var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image) val fadeOutAnimation = R.anim.fade_out_animation val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation) fadeOutImage.startAnimation(animation) animation.setAnimationListener(object : Animation.AnimationListener { override fun onAnimationStart(p0: Animation?) { // not implemented } override fun onAnimationRepeat(p0: Animation?) { // not implemented } override fun onAnimationEnd(p0: Animation?) { fadeOutImage.visibility = View.INVISIBLE } })
sumber
fade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()