View Animation — sistem animasi usang Android API 1+ yang bekerja dengan objek View melalui Tween Animation (Alpha, Translate, Scale, Rotate). Google merekomendasikan Property Animation (Animator) untuk semua proyek baru. Artikel ini menjelaskan prinsip, jenis, konfigurasi XML, dan alasan penghentian.
Poin Utama
View Animation — subsistem animasi Android yang bekerja di tingkat View (API 1+). Ia menggunakan empat jenis Tween Animation: AlphaAnimation (transparansi), TranslateAnimation (perpindahan), ScaleAnimation (skala), dan RotateAnimation (rotasi). Setiap animasi dijelaskan dalam file XML di folder res/anim/ atau dibuat secara terprogram dalam kode Kotlin.
Mekanisme View Animation tidak mengubah properti nyata View — ia menggambar ulang View di posisi, skala, atau transparansi baru, tetapi panggilan balik onTouchEvent() menerima koordinat lokasi asli. Ini adalah batasan utama, yang dikenal sebagai ketidakcocokan klik (click mismatch).
Menurut Android Developer Documentation (2026), Google menandai View Animation sebagai API usang mulai Android 3.0 (API 11). Untuk proyek baru, direkomendasikan Property Animation — Animator, AnimatorSet, dan ObjectAnimator, yang bekerja dengan properti nyata objek melalui metode setter.
Tween Animation — animasi “di antara” bingkai kunci: Anda menentukan keadaan awal dan akhir, dan sistem menghitung bingkai perantara. Android menyediakan empat jenis standar, masing-masing dengan set parameter sendiri.
AlphaAnimation mengubah transparansi View dari fromAlpha ke toAlpha. Nilai dari 0.0 (sepenuhnya transparan) hingga 1.0 (sepenuhnya terlihat). Secara default, animasi berlangsung 300 ms. Parameter fillAfter=true membuat View tetap dalam keadaan transparansi akhir.
<!-- res/anim/fade_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"
android:fillAfter="true" />TranslateAnimation memindahkan View dari posisi awal (fromXDelta, fromYDelta) ke posisi akhir (toXDelta, toYDelta). Nilai diberikan dalam piksel, persen dari induk, atau persen dari View itu sendiri. Misalnya, 100% berarti 100% lebar View.
ScaleAnimation menskala View relatif terhadap titik pivotX/pivotY. fromXScale=1.0, toXScale=2.0 menggandakan lebar. Parameter pivotType menentukan relatif terhadap apa pivot dihitung: self, parent, atau absolute. Animasi skala tidak mengubah ukuran nyata View — hanya rendering.
RotateAnimation memutar View di sekitar titik pivot dengan sudut dari fromDegrees ke toDegrees. Sudut diukur dalam derajat: 0 — posisi awal, 360 — putaran penuh. Untuk putaran tak terbatas, gunakan repeatCount=INFINITE.
Perbedaan antara View Animation dan Property Animation (Animator) — perbedaan fundamental dalam arsitektur animasi Android. View Animation hanya beroperasi pada rendering, Property Animation mengubah properti nyata objek melalui metode setter, yang menyebabkan pembaruan tata letak.
| Kriteria | View Animation | Property Animation |
|---|---|---|
| Tingkat API | API 1+ (usang) | API 11+ (direkomendasikan) |
| Apa yang dianimasikan | Rendering View (canvas) | Properti objek (setter) |
| Klik setelah animasi | Di posisi asli | Di posisi baru |
| Jenis animasi | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Tidak mengubah | Mengubah melalui setLayoutParams |
| Kinerja | Tinggi (hanya canvas) | Sedang (tergantung setter) |
View Animation biasanya didefinisikan dalam file XML res/anim/ dengan elemen root
<!-- res/anim/bounce.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator">
<translate
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration="600" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.3"
android:duration="600" />
</set>File XML dimuat melalui AnimationUtils.loadAnimation(). Interpolator menentukan hukum perubahan parameter dari waktu ke waktu: accelerate, decelerate, bounce, overshoot. Interpolator kustom dibuat melalui sumber daya XML @anim/interpolator_name.
Semua animasi Tween mendukung atribut: duration (ms), startOffset (penundaan sebelum mulai), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Atribut fillAfter menentukan apakah View tetap dalam keadaan akhir animasi setelah selesai.
Meskipun animasi biasanya didefinisikan dalam XML, mereka juga dapat dibuat secara terprogram melalui Kotlin. Pendekatan terprogram berguna untuk parameter dinamis: nilai transparansi tergantung pada keadaan aplikasi, tidak ditentukan secara statis.
// Pembuatan AlphaAnimation secara terprogram di Kotlin
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.View
fun View.fadeOut(duration: Long = 500L, onEnd: () -> Unit = {}) {
val animation = AlphaAnimation(1.0f, 0.0f).apply {
this.duration = duration
fillAfter = true
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationEnd(animation: Animation?) { onEnd() }
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
startAnimation(animation)
}
// Memuat animasi dari XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — kombinasi animasi
val set = AnimationSet(true).apply {
addAnimation(TranslateAnimation(0f, 200f, 0f, 0f).apply { duration = 400 })
addAnimation(RotateAnimation(0f, 360f).apply {
duration = 400
pivotX = view.width / 2f
pivotY = view.height / 2f
})
}
view.startAnimation(set)Metode startAnimation() menambahkan animasi ke antrian rendering View. Untuk pembatalan, gunakan clearAnimation(). Penting: fillAfter=true tidak mengubah LayoutParams — saat startAnimation dipanggil ulang, animasi dimulai dari keadaan awal View, bukan dari keadaan yang terakhir dirender.
View Animation memiliki ruang lingkup aplikasi yang sempit pada tahun 2026: dukungan Android 4.x (API 16-19), di mana Property Animation mungkin bekerja tidak stabil; efek sederhana muncul/hilang yang tidak memerlukan perubahan LayoutParams; animasi di mana ketidakcocokan klik tidak kritis (misalnya, elemen latar belakang). Untuk semua kasus lainnya, Google merekomendasikan beralih ke ObjectAnimator atau AnimatorSet.
Menurut Android Developers, Property Animation 15-20% lebih efisien dalam penggunaan memori karena tidak membuat bingkai canvas perantara. Beralih dari View Animation ke Property Animation juga menghilangkan masalah ketidakcocokan klik: View setelah animasi menerima sentuhan di posisi baru.
Pertanyaan yang Sering Diajukan
View Animation hanya mengubah rendering View — setelah animasi, View tetap di posisi asli untuk peristiwa sentuhan. Property Animation mengubah properti nyata objek, yang memperbarui LayoutParams dan memproses klik dengan benar di posisi baru.
Google menyatakan View Animation usang mulai Android 3.0 (API 11). Alasannya — ketidakcocokan klik (click mismatch) dan ketidakmampuan untuk menganimasikan properti objek sembarangan. Property Animation memecahkan masalah ini dan direkomendasikan untuk semua proyek baru.
Bisa digunakan tetapi tidak disarankan. Tombol setelah TranslateAnimation akan ditampilkan di lokasi baru, tetapi klik akan berfungsi di posisi asli. Untuk tombol, gunakan Property Animation atau komponen dengan AnimatedVisibility di Jetpack Compose.
Panggil view.clearAnimation(). Jika animasi dimulai dengan fillAfter=true, View akan tetap dalam keadaan akhir. Untuk kembali paksa ke keadaan awal, panggil clearAnimation() dan invalidate().
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga