Property Animation: یہ کیا ہے، ObjectAnimator اور ValueAnimator

مصنف: IT Sectr اشاعت: 2026-02-28 مطالعے کا وقت: 10 منٹ

Property Animation Android میں ایک اینیمیشن سسٹم ہے، جو Android 3.0 (API 11) میں متعارف کرایا گیا، جو ایک مقررہ مدت کے دوران اشیاء (صرف View نہیں) کی حقیقی خصوصیات کو تبدیل کرتا ہے۔ پرانی View Animation کے برعکس، Property Animation شے کے حقیقی فیلڈز — کوآرڈینیٹ، سائز، شفافیت، رنگ — کو تبدیل کرتی ہے، نہ کہ صرف بصری ڈسپلے کو۔ Google Android Developers (2026) کے مطابق، ٹاپ 100 میں سے 89% Android ایپس میں Property Animation استعمال ہوتی ہے۔ اینیمیشن کی دیگر اقسام کے بارے میں مزید جاننے کے لیے جنرل اینیمیشن گائیڈ دیکھیں۔

اہم نکات

  • Property Animation — Animator کے ذریعے اشیاء کی خصوصیات تبدیل کرنے کے لیے Android اینیمیشن سسٹم۔
  • ObjectAnimator — مخصوص اقدار کے ساتھ کسی شے کی مخصوص خصوصیت کو اینیمیٹ کرنے کے لیے مرکزی کلاس۔
  • ValueAnimator — بنیادی کلاس جو کسی مخصوص شے سے منسلک ہوئے بغیر اینیمیٹڈ اقدار پیدا کرتی ہے۔
  • AnimatorSet — ایک سے زیادہ اینیمیٹرز کو ترتیب یا متوازی سیٹ میں یکجا کرنے کی اجازت دیتا ہے۔
  • Property Animation Interpolator، TypeEvaluator اور AnimatorListener کے ذریعے سننے کو سپورٹ کرتی ہے۔

Property Animation کیا ہے؟

Property Animation Android SDK (android.animation پیکیج) میں ایک فریم ورک ہے جو کسی بھی شے (View، Drawable، کسٹم کلاس) کی کسی بھی خصوصیت کو مخصوص وقت میں اینیمیٹ کرتا ہے۔ View Animation کے برعکس، جو صرف View کے ساتھ کام کرتی ہے اور صرف بصری نمائندگی (میٹرکس ٹرانسفارم) تبدیل کرتی ہے، Property Animation شے کے حقیقی فیلڈز کو تبدیل کرتی ہے۔ اس کا مطلب ہے کہ translationX اینیمیشن کے بعد، شے حقیقت میں نئی پوزیشن پر ہوتی ہے اور کلکس نئی جگہ پر پروسیس ہوتے ہیں۔

Property Animation کا فن تعمیر تین اہم کلاسوں پر مبنی ہے: ValueAnimator — بنیادی ویلیو جنریٹر، ObjectAnimator — شے کی خصوصیت سے منسلک ہونے کے لیے ذیلی کلاس، AnimatorSet — گروپ اینیمیشن کے لیے آرکیسٹریٹر۔ تینوں Interpolator (رفتار کا منحنی) اور TypeEvaluator (اقدار کے درمیان انٹرپولیشن کا قاعدہ) کو سپورٹ کرتی ہیں۔

Android Performance Patterns (Google، 2025) کے مطابق، Property Animation مناسب طریقے سے ترتیب دیے گئے Interpolator اور onAnimationUpdate() میں بھاری حسابات کے بغیر 60 FPS تک چلتی ہے۔ پیچیدہ اینیمیشن (3D، فزکس) کے لیے، Android 12+ میں RenderThread (RenderNode Animations) تجویز کیا جاتا ہے۔ Property Animation View کی خصوصیات — translationX، rotationY، scaleX، alpha اور دیگر — کو اینیمیٹ کرنے کے لیے بنیادی انتخاب بنی ہوئی ہے۔

ObjectAnimator: شے کی خصوصیات کا اینیمیشن

ObjectAnimator Property Animation کی سب سے مقبول کلاس ہے۔ یہ ValueAnimator کو بڑھاتا ہے اور اینیمیٹڈ اقدار کے ساتھ مخصوص شے کی خصوصیت کے setter کو خود بخود کال کرتا ہے۔ ObjectAnimator کے کام کرنے کے لیے، شے کے پاس اینیمیٹ کی جانے والی خصوصیت کے لیے ایک عوامی setter ہونا چاہیے (مثال کے طور پر، “translationX” خصوصیت کے لیے setTranslationX(float))۔

kotlin
import android.animation.ObjectAnimator
import android.view.View

// ObjectAnimator for translationX
val animator = ObjectAnimator.ofFloat(
    myView,
    "translationX",
    0f,
    300f
).apply {
    duration = 500L
    startDelay = 200L
    repeatCount = 1
    repeatMode = ValueAnimator.REVERSE
    interpolator = FastOutSlowInInterpolator()
    start()
}

تعاون یافتہ View خصوصیات: translationX، translationY، translationZ، rotation، rotationX، rotationY، scaleX، scaleY، alpha، x، y، elevation۔ ObjectAnimator.ofFloat() float خصوصیات کے لیے، ofInt() int کے لیے، ofObject() کسٹم اقسام (رنگ، نقطہ) کے لیے استعمال ہوتا ہے۔ رنگ کی اینیمیشن کے لیے، ArgbEvaluator یا HsvEvaluator کے ساتھ ofObject() استعمال کریں۔

kotlin
// ObjectAnimator کسٹم TypeEvaluator (رنگ) کے ساتھ
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()
}

// ایک ساتھ متعدد خصوصیات کو اینیمیٹ کرنا
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 — اینیمیشن ایونٹس (onAnimationStart، onAnimationEnd، onAnimationCancel، onAnimationRepeat) کو ٹریک کرنے کے لیے ایک انٹرفیس۔ صرف ضروری طریقوں کو اوور رائڈ کرنے کے لیے AnimatorListenerAdapter استعمال کریں۔ Android 12 سے شروع کرتے ہوئے، suspendAnimationFrame کے ذریعے coroutine سپورٹ کے ساتھ Animator.AnimationCallback شامل کیا گیا ہے۔

ValueAnimator: اینیمیٹڈ اقدار پیدا کرنا

ValueAnimator Property Animation کی بنیادی کلاس ہے جو ایک مقررہ مدت میں شروع سے آخر تک اینیمیٹڈ اقدار پیدا کرتی ہے۔ ObjectAnimator کے برعکس، ValueAnimator کسی شے سے منسلک نہیں ہوتا — یہ صرف درمیانی اقدار کا حساب لگاتا ہے اور ایک سننے والے کے ذریعے مطلع کرتا ہے۔ ڈیولپر فیصلہ کرتا ہے کہ حاصل کردہ اقدار کے ساتھ کیا کرنا ہے: View کی خصوصیت سیٹ کرنا، Drawable پیرامیٹر تبدیل کرنا، onDraw() میں کسٹم ڈرائنگ اپ ڈیٹ کرنا۔

kotlin
import android.animation.ValueAnimator
import android.view.animation.LinearInterpolator

"> ValueAnimator: لوڈنگ کی پیشرفت کی اینیمیشن
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() — عددی خصوصیات (چوڑائی، اونچائی، مراحل کی تعداد) کے لیے استعمال ہوتا ہے۔ ValueAnimator.ofObject() — TypeEvaluator کے ساتھ کسٹم اقسام کے لیے۔ ValueAnimator.ofPropertyValuesHolder() — ایک ٹائمر کے ساتھ متعدد خصوصیات کے متوازی اینیمیشن کے لیے، ہر خصوصیت کے لیے علیحدہ Animators کے مقابلے میں وسائل بچاتا ہے۔

kotlin
// ValueAnimator.ofObject PointEvaluator کے ساتھ
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 کی کارکردگی: 60 FPS پر، onAnimationUpdate ہر ~16.7 ms پر کال ہوتا ہے۔ سننے والے کے اندر ان سے بچیں: آبجیکٹ مختص (PointF/RectF ایک بار بنائیں)، findViewById() کال کرنا، بھاری حسابات (فائل I/O، نیٹ ورک)۔ 20+ عناصر کو بیک وقت اینیمیٹ کرنے کے لیے، 20 علیحدہ Animators کے بجائے ایک Animator میں PropertyValuesHolder استعمال کریں۔ سائز تبدیل کرنے والے اینیمیشن کے لیے، اینیمیشن کے آخر میں صرف View.setLayoutParams() استعمال کریں (AnimatorListenerAdapter.onAnimationEnd کے ذریعے)۔

AnimatorSet: اینیمیشن کمپوزیشن

AnimatorSet ایک آرکیسٹریٹر ہے جو ایک سے زیادہ Animator (ObjectAnimator، ValueAnimator) مثالوں کو ایک مخصوص ترتیب میں چلانے کی اجازت دیتا ہے: ترتیب وار (playSequentially)، متوازی (playTogether)، تاخیر کے ساتھ (after، before، with)۔ AnimatorSet nesting کو سپورٹ کرتا ہے — پیچیدہ منظرناموں کے لیے ایک AnimatorSet دوسرے AnimatorSets پر مشتمل ہو سکتا ہے۔

kotlin
import android.animation.AnimatorSet
import android.animation.ObjectAnimator

// AnimatorSet: ترتیب وار اور متوازی اینیمیشن
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 {
    // متوازی: fadeIn + slideUp
    play(fadeIn).with(slideUp)
    "> بعد: 200ms تاخیر کے ساتھ 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 زنجیریں بنانے کے لیے ایک فلوئنٹ API فراہم کرتا ہے: with() — متوازی، before() — پہلے، after() — بعد۔ AnimatorSet سیٹ میں تمام اینیمیشن روکنے کے لیے cancel() کو سپورٹ کرتا ہے۔ پیچیدہ منظرناموں (25+ اینیمیٹر) کے لیے، PropertyValuesHolder استعمال کریں — یہ زیادہ کارآمد ہے کیونکہ یہ ہر Animator کے لیے علیحدہ ٹائمر کے بجائے ایک مشترکہ ٹائمر استعمال کرتا ہے۔

Builder طریقہتفصیلمثال
with(Animator)موجودہ اینیمیشن کے متوازی چلائیںplay(fadeIn).with(slideUp)
before(Animator)موجودہ اینیمیشن مخصوص سے پہلےplay(fadeIn).before(bounce)
after(Animator)موجودہ اینیمیشن مخصوص کے بعدplay(bounce).after(slideUp)
after(Long)موجودہ اینیمیشن سے پہلے تاخیرplay(bounce).after(200L)

Interpolator اور TypeEvaluator: رفتار اور قسم کا کنٹرول

Interpolator 0 سے 1 تک اینیمیشن کے رفتار کے منحنی کو متعین کرتا ہے۔ Android بلٹ ان Interpolator فراہم کرتا ہے: LinearInterpolator (یکساں)، AccelerateDecelerateInterpolator (سست-تیز-سست)، FastOutSlowInInterpolator (Material Design)، OvershootInterpolator (ہدف سے تجاوز کرنے کے ساتھ)، BounceInterpolator (اچھلنے کے ساتھ)، AnticipateOvershootInterpolator (شروع ہونے سے پہلے پیچھے ہٹنے اور ہدف سے تجاوز کرنے کے ساتھ)۔ کسٹم Interpolator TimeInterpolator کے ذریعے نافذ کیا جاتا ہے۔

kotlin
import android.animation.ObjectAnimator
import android.view.animation.BounceInterpolator
import android.view.animation.OvershootInterpolator
import android.view.animation.AnticipateOvershootInterpolator

// BounceInterpolator — آخر میں اچھلنے کا اثر
val bounceAnim = ObjectAnimator.ofFloat(myView, "translationY", 0f, -50f).apply {
    duration = 600L
    interpolator = BounceInterpolator()
    start()
}

// AnticipateOvershoot — پیچھے ہٹنا، پھر تجاوز کرنا
val anticipateAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.3f).apply {
    duration = 500L
    interpolator = AnticipateOvershootInterpolator(2.0f)
    start()
}

TypeEvaluator — evaluate(fraction, startValue, endValue) طریقہ کے ساتھ ایک انٹرفیس جو شروع اور آخر کے درمیان درمیانی قدر کا حساب لگاتا ہے۔ بلٹ ان: ArgbEvaluator (int رنگ)، FloatEvaluator، IntEvaluator، PointFEvaluator، RectEvaluator۔ کسٹم ڈیٹا اقسام کے لیے (مثال کے طور پر، تین فیلڈز والی کسٹم کلاس کو اینیمیٹ کرنا)، اپنا خود کا TypeEvaluator نافذ کریں۔ ایک ہی سیٹنگز کے ساتھ ایک سے زیادہ Views کو اینیمیٹ کرنے کے لیے، PropertyValuesHolder استعمال کریں — یہ پراپرٹی ناموں اور متعلقہ اقدار کی ایک صف قبول کرتا ہے۔

kotlin
// ProgressState کلاس کے لیے کسٹم TypeEvaluator
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 — زیادہ سے زیادہ کارکردگی
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()
}

اکثر پوچھے گئے سوالات

Property Animation View Animation سے کیسے مختلف ہے؟

View Animation (Tween Animation) میٹرکس ٹرانسفارمیشن کے ذریعے صرف View کی بصری نمائندگی کو تبدیل کرتی ہے، شے کی حقیقی خصوصیات کو متاثر کیے بغیر۔ View Animation میں translationX اینیمیشن کے بعد، عنصر بصری طور پر منتقل ہو جاتا ہے، لیکن کلکس اب بھی اصل پوزیشن پر پروسیس ہوتے ہیں۔ Property Animation (ObjectAnimator) حقیقی خصوصیت کو تبدیل کرتی ہے — اینیمیشن کے بعد، عنصر جسمانی طور پر نئی پوزیشن پر ہوتا ہے۔

Property Animation کو کیسے روکیں؟

animator.cancel() کال کریں — اینیمیشن فوراً رک جاتی ہے، حتمی قدر لاگو نہیں ہوتی۔ animator.end() کال کرنا — اینیمیشن حتمی حالت میں چلی جاتی ہے اور رک جاتی ہے۔ AnimatorSet کے لیے — set.cancel() سیٹ میں تمام اینیمیشن روک دیتا ہے۔ Animator.pause() اور resume() عارضی روک کے لیے API 19+ پر دستیاب ہیں۔

مختلف اقسام کی اینیمیشن کے لیے کون سا Interpolator استعمال کریں؟

Material Design تجویز کرتا ہے: FastOutSlowInInterpolator — عناصر کے ظاہر اور غائب ہونے والی اینیمیشن کے لیے، LinearInterpolator — لوڈنگ انڈیکیٹرز کے لیے، OvershootInterpolator — زور دار اثرات (بٹن) کے لیے، BounceInterpolator — پل ٹو رفریش اور اسپرنگ عناصر کے لیے۔ اسکرین سے باہر سے ظاہر ہونے والی اینیمیشن کے لیے، AccelerateDecelerateInterpolator استعمال کریں۔

ObjectAnimator خصوصیت کو کیوں اینیمیٹ نہیں کر رہا؟

چیک کریں: (1) شے کے پاس مخصوص خصوصیت کے لیے عوامی setter ہے (setPropertyName())، (2) خصوصیت “set” کے بعد چھوٹے حرف کے ساتھ camelCase میں لکھی گئی ہے، (3) setter وہی قسم قبول کرتا ہے جو آپ دے رہے ہیں (ofFloat → setPropertyName(float))۔ View کے لیے، تمام معیاری خصوصیات (alpha، translationX، rotation وغیرہ) کے setter ہوتے ہیں۔

ValueAnimator کے بجائے ObjectAnimator کب استعمال کریں؟

ObjectAnimator — جب آپ ایک معیاری View خصوصیت (alpha، translationX، rotation) کو اینیمیٹ کر رہے ہوں۔ ValueAnimator — جب آپ کو ایک سننے والے سے متعدد خصوصیات کو اپ ڈیٹ کرنے، غیر View خصوصیات (پیش رفت، کسٹم ڈرائنگ) کو اینیمیٹ کرنے، یا جب شے کے پاس مطلوبہ خصوصیت کے لیے setter نہ ہو۔ ValueAnimator زیادہ لچکدار ہے لیکن دستی اپ ڈیٹس کے لیے مزید کوڈ کی ضرورت ہے۔

خلاصہ

  • Property Animation — Animator کے ذریعے حقیقی شے کی خصوصیات کو اینیمیٹ کرنے کے لیے Android فریم ورک۔
  • ObjectAnimator — مخصوص شروع/اختتام اقدار کے ساتھ کسی مخصوص شے کی خصوصیت کا اینیمیشن۔
  • ValueAnimator — onAnimationUpdate میں دستی اپ ڈیٹس کے ساتھ اینیمیٹڈ اقدار کی پیداوار۔
  • AnimatorSet — ایک سے زیادہ اینیمیٹرز کی ترتیب وار یا متوازی آرکیسٹریشن۔
  • Interpolator — رفتار کا منحنی: FastOutSlowIn، Linear، Bounce، Overshoot، کسٹم۔
  • TypeEvaluator — کسٹم ڈیٹا اقسام کے لیے اقدار کے درمیان انٹرپولیشن کا قاعدہ۔
  • Property Values Holder (PropertyValuesHolder) — متعدد خصوصیات کے متوازی اینیمیشن کے لیے اصلاح۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں