Dengan API animasi baru yang diperkenalkan di Android 3.0 (Honeycomb), sangat mudah untuk membuat animasi seperti itu.
Geser View
ke bawah dengan jarak:
view.animate().translationY(distance);
Anda nanti dapat menggeser View
kembali ke posisi semula seperti ini:
view.animate().translationY(0);
Anda juga dapat dengan mudah menggabungkan beberapa animasi. Animasi berikut ini akan meluncur View
ke bawah dengan ketinggiannya dan memudar pada saat yang bersamaan:
// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);
// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f)
.setListener(null);
Anda kemudian dapat memudar View
kembali dan geser kembali ke posisi semula. Kami juga mengatur AnimatorListener
agar kami dapat mengatur visibilitas ke View
belakang GONE
setelah animasi selesai:
view.animate()
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.GONE);
}
});
View
ketika visibilitasnya diatur keView.GONE
? Jika Anda mengatur visibilitasnya ke hal lain selainView.VISIBLE
ituView
tidak akan terlihat. Saya tidak mengerti apa yang Anda minta. Jika Anda ingin animasi Anda terlihat maka jangan atur visibilitasView
keView.GONE
.onAnimationEnd
dipanggil setiap kali untuk animasi multi-kejadian, yang artinyaonAnimationEnd
dipanggil juga ketika tampilan ditampilkan, yang menetapkan visibilitasnya ke Gone, dll.Saya kesulitan memahami penerapan jawaban yang diterima. Saya membutuhkan lebih banyak konteks. Sekarang saya sudah menemukan jawabannya, berikut adalah contoh lengkapnya:
MainActivity.java
activity_mail.xml
Catatan
INVISIBLE
.INVISIBLE
. Jika Anda tidak menghidupkan layar sepenuhnya, maka Anda dapat menambahkan animasi alfa dan mengatur visibilitas denganAnimatorListenerAdapter
.sumber
.setVisibility(View.INVISIBLE);
fungsi geser ke atas tidak akan berfungsi seperti yang diharapkan secara visual.Translate Animation
menggerakkan tampilan. Jika Anda ingin menghidupkan tampilan seperti penskalaannya sendiri, gunakanScaleAnimation anim = new ScaleAnimation(1, 1, 0, 1)
Sekarang animasi perubahan visibilitas harus dilakukan melalui
Transition API
yang tersedia dalam paket dukungan (androidx). Cukup panggil metode TransitionManager.beginDelayedTransition dengan transisi Slide kemudian ubah visibilitas tampilan.activity_main.xml
Periksa jawaban ini dengan contoh transisi default dan kustom lainnya.
sumber
minSdkVersion 21
androidx
paket. Ini bekerja dengan baik pada pra 21 api.Solusi termudah: atur
android:animateLayoutChanges="true"
pada wadah yang menahan pandangan Anda.Untuk memasukkannya ke dalam beberapa konteks: Jika Anda memiliki tata letak seperti di bawah ini, semua perubahan visibilitas pada tampilan dalam wadah ini akan dianimasikan secara otomatis.
Anda dapat menemukan detail lebih lanjut tentang ini di Animating Layout Changes - Developer Android
sumber
Anda dapat memulai yang benar
Animation
ketika visibilitasLinearLayout
perubahan dengan membuat subclass baruLinearLayout
dansetVisibility()
mengganti untuk memulaiAnimations
. Pertimbangkan sesuatu seperti ini:sumber
View
bertanggung jawab untuk animasinya sendiri yang TIDAK PERNAH apa yang Anda inginkan. Bayangkan Anda ingin menghidupkan yangView
berbeda di bagian lain aplikasi Anda. Apa yang kamu lakukan? Tambahkan bendera agar tidak secara otomatis menggerakkan visibilitas? SubkelasView
dan gantisetVisibility()
untuk menghapus animasi? Atau implementasi yang lebih buruksetVisibility()
dengan animasi lain? Hanya saja semakin jelek dari sana. Jangan gunakan "solusi" ini.Kotlin
Berdasarkan Suragch 's jawaban , di sini adalah cara yang elegan menggunakan View ekstensi:
Dan kemudian di mana pun Anda ingin menggunakannya, Anda hanya perlu
myView.slideUp()
ataumyView.slideDown()
sumber
sumber
setAlpha
?Anda dapat menggeser ke atas dan ke bawah tampilan atau tata letak apa pun dengan menggunakan kode di bawah ini di aplikasi Android
sumber
Gunakan kelas ini:
sumber
Menggunakan ObjectAnimator
sumber
0.toFloat()
bisa juga hanya0f
Saya memiliki kasus sudut di mana ketinggian pandangan saya masih
zero
sangat ...sumber
Ini solusinya. Dapatkan referensi ke tampilan Anda dan panggil metode ini:
Tidak perlu melakukan hal lain =)
sumber
Jawaban Suragch di Kotlin. Ini berhasil untuk saya.
}
sumber
Anda dapat menggunakan tiga baris kode sederhana untuk menampilkan ...
sumber
Dengan ekstensi Kotlin Anda dapat menggunakan ini:
Contoh untuk ekstensi:
sumber
Salah satu cara sederhana:
sumber