Property Animation — Android 3.0 (API 11) da taqdim etilgan, ob'ektlarning (faqat View emas) real xususiyatlarini berilgan vaqt oralig'ida o'zgartiruvchi Android animatsiya tizimi. Eskirgan View Animation-dan farqli o'laroq, Property Animation ob'ektning haqiqiy maydonlarini — koordinatalar, o'lcham, shaffoflik, rang — faqat vizual ko'rinishni emas, o'zgartiradi. Google Android Developers (2026) ma'lumotlariga ko'ra, Property Animation top-100 Android ilovalarining 89% ida qo'llaniladi. Boshqa animatsiya turlari haqida umumiy animatsiya qo'llanmasida o'qing.
Asosiy
Property Animation — Android SDK (android.animation paketi) dagi freymvork bo'lib, istalgan ob'ektning (View, Drawable, maxsus sinf) istalgan xususiyatlarini belgilangan vaqt davomida animatsiya qiladi. Faqat View bilan ishlaydigan va vizual ko'rinishni (matrix transform) o'zgartiruvchi View Animation-dan farqli o'laroq, Property Animation ob'ektning real maydonlarini o'zgartiradi. Bu degani, translationX animatsiyasidan so'ng ob'ekt haqiqatan ham yangi pozitsiyada joylashadi va kliklar yangi joyda ishlanadi.
Property Animation arxitekturasi uchta asosiy sinfga asoslangan: ValueAnimator — bazaviy qiymat generatori, ObjectAnimator — ob'ekt xususiyatiga bog'lash uchun osti sinfi, AnimatorSet — guruh animatsiyasi uchun orkestrator. Uchalasi ham Interpolator (tezlik egri chizig'i) va TypeEvaluator (qiymatlar orasidagi interpolyatsiya qoidasi) ni qo'llab-quvvatlaydi.
Android Performance Patterns (Google, 2025) ma'lumotlariga ko'ra, Property Animation to'g'ri sozlangan Interpolator va onAnimationUpdate() da og'ir hisob-kitoblar bo'lmaganda 60 FPS chastotasida ishlaydi. Murakkab animatsiyalar (3D, fizika) uchun Android 12+ da RenderThread (RenderNode Animations) tavsiya etiladi. Property Animation View xususiyatlari — translationX, rotationY, scaleX, alpha va boshqalarning animatsiyasi uchun asosiy tanlov bo'lib qolmoqda.
ObjectAnimator — Property Animation-ning eng mashhur sinfi. ValueAnimator-dan meros oladi va ob'ektning ko'rsatilgan xususiyatining setter-ni animatsiya qiymatlari bilan avtomatik chaqiradi. ObjectAnimator ishlashi uchun ob'ektda animatsiya qilinadigan xususiyat uchun umumiy setter bo'lishi kerak (masalan, «translationX» xususiyati uchun setTranslationX(float)).
import android.animation.ObjectAnimator
import android.view.View
// ObjectAnimator translationX uchun
val animator = ObjectAnimator.ofFloat(
myView,
"translationX",
0f,
300f
).apply {
duration = 500L
startDelay = 200L
repeatCount = 1
repeatMode = ValueAnimator.REVERSE
interpolator = FastOutSlowInInterpolator()
start()
}
Qo'llab-quvvatlanadigan View xususiyatlari: translationX, translationY, translationZ, rotation, rotationX, rotationY, scaleX, scaleY, alpha, x, y, elevation. ObjectAnimator.ofFloat() float xususiyatlari uchun, ofInt() — int uchun, ofObject() — maxsus turlar (rang, nuqta) uchun ishlatiladi. Rang animatsiyasi uchun ArgbEvaluator yoki HsvEvaluator bilan ofObject() dan foydalaning.
// ObjectAnimator maxsus TypeEvaluator bilan (rang)
import android.animation.ObjectAnimator
import android.animation.ArgbEvaluator
import android.graphics.Color
val colorAnim = ObjectAnimator.ofObject(
myView,
"backgroundColor",
ArgbEvaluator(),
Color.BLUE,
Color.RED
).apply {
duration = 1000L
repeatCount = ValueAnimator.INFINITE
repeatMode = ValueAnimator.REVERSE
start()
}
// Bir nechta xususiyatning bir vaqtda animatsiyasi
val scaleXAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.5f)
val scaleYAnim = ObjectAnimator.ofFloat(myView, "scaleY", 1f, 1.5f)
val alphaAnim = ObjectAnimator.ofFloat(myView, "alpha", 1f, 0.5f)
AnimatorListener — animatsiya hodisalarini kuzatish uchun interfeys: onAnimationStart, onAnimationEnd, onAnimationCancel, onAnimationRepeat. Faqat kerakli metodlarni qayta yozish uchun AnimatorListenerAdapter dan foydalaning. Android 12 dan boshlab suspendAnimationFrame orqali korutinlarni qo'llab-quvvatlovchi Animator.AnimationCallback qo'shilgan.
ValueAnimator — Property Animation-ning bazaviy sinfi, start dan end gacha berilgan vaqtda animatsiya qiymatlarini yaratadi. ObjectAnimator-dan farqli o'laroq, ValueAnimator ob'ektga bog'lanmagan — u faqat oraliq qiymatlarni hisoblaydi va tinglovchi orqali xabar beradi. Dasturchi olingan qiymatlar bilan nima qilishni o'zi hal qiladi: View xususiyatini o'rnatish, Drawable parametrini o'zgartirish, onDraw() da maxsus chizishni yangilash.
import android.animation.ValueAnimator
import android.view.animation.LinearInterpolator
"> ValueAnimator: yuklash jarayoni animatsiyasi
val valueAnimator = ValueAnimator.ofFloat(0f, 100f).apply {
duration = 2000L
interpolator = LinearInterpolator()
repeatCount = ValueAnimator.INFINITE
addUpdateListener { animator ->
val progress = animator.animatedValue as Float
progressBar.progress = progress.toInt()
progressText.text = "${progress.toInt()}%"
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationRepeat(animation: Animator) {
Log.d("Anim", "Progress animation restarted")
}
})
start()
}
ValueAnimator.ofInt() — butun son xususiyatlari (kenglik, balandlik, qadamlar soni) uchun ishlatiladi. ValueAnimator.ofObject() — TypeEvaluator bilan maxsus turlar uchun. ValueAnimator.ofPropertyValuesHolder() — bir taymer bilan bir nechta xususiyatning parallel animatsiyasi uchun, bu har bir xususiyat uchun alohida Animator bilan solishtirganda resurslarni tejaydi.
// ValueAnimator.ofObject PointEvaluator bilan
import android.animation.ValueAnimator
import android.graphics.PointF
import android.animation.PointFEvaluator
val pointAnim = ValueAnimator.ofObject(
PointFEvaluator(),
PointF(0f, 0f),
PointF(300f, 500f)
).apply {
duration = 1000L
addUpdateListener { animator ->
val point = animator.animatedValue as PointF
movingView.x = point.x
movingView.y = point.y
}
start()
}
ValueAnimator unumdorligi: 60 FPS chastotasida onAnimationUpdate har ~16.7 ms chaqiriladi. Tinglovchi ichida quyidagilardan saqlaning: ob'ektlarni ajratish (PointF/RectF bir marta yarating), findViewById() chaqirish, og'ir hisob-kitoblar (fayl kiritish-chiqarish, tarmoq). 20+ bir vaqtda elementlarning animatsiyasi uchun 20 ta alohida Animator o'rniga bitta Animator da PropertyValuesHolder dan foydalaning. O'lcham o'zgarishi bilan animatsiya uchun View.setLayoutParams() faqat animatsiya oxirida (AnimatorListenerAdapter.onAnimationEnd orqali) foydalaning.
AnimatorSet — bir nechta Animator (ObjectAnimator, ValueAnimator) ni ma'lum tartibda ishga tushirish imkonini beruvchi orkestratordir: ketma-ket (playSequentially), parallel (playTogether), kechikishlar bilan (after, before, with). AnimatorSet ichki joylashtirishni qo'llab-quvvatlaydi — AnimatorSet murakkab stsenariylar uchun boshqa AnimatorSet larni o'z ichiga olishi mumkin.
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
// AnimatorSet: ketma-ket va parallel animatsiya
val fadeIn = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)
val slideUp = ObjectAnimator.ofFloat(myView, "translationY", 100f, 0f)
val bounce = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.1f, 1f)
val animatorSet = AnimatorSet().apply {
// Parallel: fadeIn + slideUp
play(fadeIn).with(slideUp)
"> Keyin: 200ms kechikishli bounce
play(bounce).after(200L)
duration = 400L
interpolator = FastOutSlowInInterpolator()
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
Log.d("Anim", "Set completed")
}
})
start()
}
AnimatorSet.Builder zanjirlar qurish uchun fluent API taqdim etadi: with() — parallel, before() — oldin, after() — keyin. AnimatorSet to'plamdagi barcha animatsiyalarni to'xtatish uchun cancel() ni qo'llab-quvvatlaydi. Murakkab stsenariylar (25+ animator) uchun PropertyValuesHolder dan foydalaning — har bir Animator uchun alohida taymer o'rniga bitta umumiy taymerdan foydalangani uchun unumliroqdir.
| Builder metodi | Ta'rif | Misol |
|---|---|---|
| with(Animator) | Joriy animatsiya bilan parallel ishga tushirish | play(fadeIn).with(slideUp) |
| before(Animator) | Joriy animatsiya ko'rsatilgandan oldin | play(fadeIn).before(bounce) |
| after(Animator) | Joriy animatsiya ko'rsatilgandan keyin | play(bounce).after(slideUp) |
| after(Long) | Joriy animatsiyadan oldin kechikish | play(bounce).after(200L) |
Interpolator animatsiya tezligining 0 dan 1 gacha o'zgarish egri chizig'ini aniqlaydi. Android ichki Interpolator larni taqdim etadi: LinearInterpolator (teng), AccelerateDecelerateInterpolator (sekin-tez-sekin), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (maqsaddan oshib), BounceInterpolator (sakrash bilan), AnticipateOvershootInterpolator (boshlashdan oldin orqaga tortilish va maqsaddan oshib). Maxsus Interpolator TimeInterpolator orqali amalga oshiriladi.
import android.animation.ObjectAnimator
import android.view.animation.BounceInterpolator
import android.view.animation.OvershootInterpolator
import android.view.animation.AnticipateOvershootInterpolator
// BounceInterpolator — oxirida sakrash effekti
val bounceAnim = ObjectAnimator.ofFloat(myView, "translationY", 0f, -50f).apply {
duration = 600L
interpolator = BounceInterpolator()
start()
}
// AnticipateOvershoot — orqaga tortilish, keyin oshib ketish
val anticipateAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.3f).apply {
duration = 500L
interpolator = AnticipateOvershootInterpolator(2.0f)
start()
}
TypeEvaluator — start va end o'rtasidagi oraliq qiymatni hisoblovchi evaluate(fraction, startValue, endValue) metodi bo'lgan interfeys. Ichki: ArgbEvaluator (rang int), FloatEvaluator, IntEvaluator, PointFEvaluator, RectEvaluator. Maxsus ma'lumot turlari uchun (masalan, uch maydonli maxsus sinf animatsiyasi) o'z TypeEvaluator ingizni amalga oshiring. Bir xil sozlamalar bilan bir nechta View animatsiyasi uchun PropertyValuesHolder dan foydalaning — xususiyat nomlari va tegishli qiymatlar massivini qabul qiladi.
// Maxsus TypeEvaluator ProgressState sinfi uchun
data class ProgressState(val progress: Float, val color: Int)
class ProgressEvaluator : TypeEvaluator<ProgressState> {
override fun evaluate(
fraction: Float,
startValue: ProgressState,
endValue: ProgressState
): ProgressState {
val progress = startValue.progress + fraction * (endValue.progress - startValue.progress)
val color = ArgbEvaluator().evaluate(
fraction, startValue.color, endValue.color
) as Int
return ProgressState(progress, color)
}
}
"> PropertyValuesHolder — maksimal ishlash unumdorligi
val pvh1 = PropertyValuesHolder.ofFloat("scaleX", 1f, 1.5f)
val pvh2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 1.5f)
val pvhAnim = ObjectAnimator.ofPropertyValuesHolder(myView, pvh1, pvh2).apply {
duration = 300L
start()
}
Tez-tez beriladigan savollar
View Animation (Tween Animation) View ning faqat vizual ko'rinishini matrix transform orqali o'zgartiradi, ob'ektning real xususiyatlariga ta'sir qilmaydi. View Animation da translationX animatsiyasidan keyin element vizual ravishda siljigan bo'ladi, lekin kliklar asl pozitsiyada ishlanadi. Property Animation (ObjectAnimator) real xususiyatni o'zgartiradi — animatsiyadan keyin element jismonan yangi pozitsiyada joylashadi.
animator.cancel() ni chaqiring — animatsiya darhol to'xtaydi, yakuniy qiymat qo'llanilmaydi. animator.end() chaqiruvi — animatsiya yakuniy holatga o'tadi va to'xtaydi. AnimatorSet uchun — set.cancel() to'plamdagi barcha animatsiyalarni to'xtatadi. Animator.pause() va resume() vaqtinchalik to'xtatish uchun API 19+ da mavjud.
Material Design tavsiya qiladi: FastOutSlowInInterpolator — elementlarning paydo bo'lishi va yo'qolishi uchun, LinearInterpolator — yuklash ko'rsatkichlari uchun, OvershootInterpolator — urg'u effektlari (tugmalar) uchun, BounceInterpolator — pull-to-refresh va prujina elementlari uchun. Ekran chetidan paydo bo'lish animatsiyasi uchun AccelerateDecelerateInterpolator dan foydalaning.
Tekshiring: (1) ob'ekt ko'rsatilgan xususiyat uchun umumiy setter ga ega (setPropertyName()), (2) xususiyat «set» dan keyin kichik harf bilan camelCase da yozilgan, (3) setter siz uzatayotgan bir xil turni qabul qiladi (ofFloat → setPropertyName(float)). View uchun barcha standart xususiyatlar (alpha, translationX, rotation va h.k.) setter ga ega.
ObjectAnimator — View ning bitta standart xususiyatini (alpha, translationX, rotation) animatsiya qilganda. ValueAnimator — bir tinglovchidan bir nechta xususiyatni yangilash, View bo'lmagan xususiyatlarni (progress, maxsus chizish) animatsiya qilish yoki ob'ektning kerakli xususiyat uchun setter i bo'lmaganda. ValueAnimator yanada moslashuvchan, lekin qo'lda yangilash uchun ko'proq kod talab qiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing