Property Animation: bu nima, ObjectAnimator va ValueAnimator

Muallif: IT Sectr Nashr etilgan: 2026-02-28 O'qish vaqti: 10 daq

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 animatsiya tizimi, Animator orqali ob'ektlarning xususiyatlarini o'zgartiradi.
  • ObjectAnimator — ob'ektning ma'lum xususiyatini ko'rsatilgan qiymatlar bilan animatsiya qilish uchun asosiy sinf.
  • ValueAnimator — aniq ob'ektga bog'lanmagan holda animatsiya qiymatlarini yaratuvchi bazaviy sinf.
  • AnimatorSet — bir nechta animatorlarni ketma-ketlik yoki parallel to'plamda birlashtirish imkonini beradi.
  • Property Animation Interpolator, TypeEvaluator va AnimatorListener orqali tinglashni qo'llab-quvvatlaydi.

Property Animation nima?

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: ob'ekt xususiyatlarining animatsiyasi

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)).

kotlin
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.

kotlin
// 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: animatsiya qiymatlarini yaratish

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.

kotlin
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.

kotlin
// 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: animatsiyalar kompozitsiyasi

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.

kotlin
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 metodiTa'rifMisol
with(Animator)Joriy animatsiya bilan parallel ishga tushirishplay(fadeIn).with(slideUp)
before(Animator)Joriy animatsiya ko'rsatilgandan oldinplay(fadeIn).before(bounce)
after(Animator)Joriy animatsiya ko'rsatilgandan keyinplay(bounce).after(slideUp)
after(Long)Joriy animatsiyadan oldin kechikishplay(bounce).after(200L)

Interpolator va TypeEvaluator: tezlik va turni boshqarish

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.

kotlin
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.

kotlin
// 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

Property Animation View Animation dan qanday farq qiladi?

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.

Property Animation ni qanday to'xtatish mumkin?

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.

Har xil animatsiya turlari uchun qaysi Interpolator dan foydalanish kerak?

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.

Nega ObjectAnimator xususiyatni animatsiya qilmaydi?

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.

Qachon ObjectAnimator o'rniga ValueAnimator ishlatiladi?

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

  • Property Animation — Android freymvorki, Animator orqali ob'ektlarning real xususiyatlarini animatsiya qiladi.
  • ObjectAnimator — ma'lum ob'ekt xususiyatining berilgan start/end qiymatlari bilan animatsiyasi.
  • ValueAnimator — onAnimationUpdate da qo'lda yangilash bilan animatsiya qiymatlarini yaratish.
  • AnimatorSet — bir nechta animatorlarni ketma-ket yoki parallel orkestratsiyasi.
  • Interpolator — tezlik egri chizig'i: FastOutSlowIn, Linear, Bounce, Overshoot, maxsus.
  • TypeEvaluator — maxsus ma'lumot turlari uchun qiymatlar orasidagi interpolyatsiya qoidasi.
  • Property Values Holder (PropertyValuesHolder) — bir nechta xususiyatning parallel animatsiyasi uchun optimallashtirish.

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.

Loyihani muhokama qilish

Shuningdek o'qing