Interpolator — یہ کیا ہے، Android میں انٹرپولیشن منحنیات

مصنف: IT Sectr اشاعت: 2026-03-02 مطالعے کا وقت: 8 منٹ
Interpolator — Android Animation Framework کا ایک جزو ہے جو وقت کے ساتھ اینیمیشن ویلیو تبدیلی کے ریاضیاتی منحنی کی وضاحت کرتا ہے۔ لکیری حرکت (ایک شے مستقل رفتار سے چلتی ہے) کے بجائے، Interpolator اینیمیشن کو تیز، سست یا چکریی طور پر تبدیل کرنے کی اجازت دیتا ہے، قدرتی رویہ پیدا کرتا ہے۔ Android 9 بلٹ ان انٹرپولیٹر فراہم کرتا ہے: AccelerateInterpolator، DecelerateInterpolator، AccelerateDecelerateInterpolator، AnticipateInterpolator، OvershootInterpolator، BounceInterpolator، CycleInterpolator، LinearInterpolator اور PathInterpolator۔ Android ڈویلپر دستاویزات کے مطابق، غیر لکیری Interpolator کا استعمال محسوس شدہ اینیمیشن وقت کو 25–40% تک کم کرتا ہے — صارف ردعمل کو ہموار اور زیادہ responsive سمجھتا ہے۔ IT Sectr میں ہم عناصر کے ظاہر ہونے کے لیے AccelerateDecelerateInterpolator اور ایکشن بٹن کے لیے OvershootInterpolator استعمال کرتے ہیں۔

اہم نکات

  • Interpolator — ایک ریاضیاتی فنکشن جو اینیمیشن کی لکیری پیشرفت (0→1) کو غیر لکیری رفتار منحنی میں تبدیل کرتا ہے۔
  • Android میں 9 بلٹ ان انٹرپولیٹر: Linear سے Bounce تک — 90% عام اینیمیشن منظرناموں کا احاطہ کرتے ہیں۔
  • PathInterpolator (API 21+) دو کنٹرول پوائنٹس کے ساتھ صوابدیدی Bezier منحنی کی وضاحت کرنے کی اجازت دیتا ہے۔
  • TimeInterpolator — getInterpolation() طریقہ کے ساتھ کسٹم انٹرپولیٹر بنانے کے لیے ایک انٹرفیس۔
  • AccelerateDecelerateInterpolator — ایک ہم آہنگ منحنی: شروع میں تیزی، آخر میں سستی، سب سے عالمگیر انتخاب۔

Interpolator کیا ہے؟

Interpolator — Android میں ایک انٹرفیس جو اینیمیشن پیشرفت کی جزوی قیمت (0.0 سے 1.0) کو تبدیل شدہ رفتار کے ساتھ حقیقی قیمت سے map کرتا ہے۔ اگر کوئی اینیمیشن 300 ملی سیکنڈ تک چلتی ہے، تو سسٹم ہر فریم کے لیے Interpolator کو کال کرتا ہے، موجودہ پیشرفت پاس کرتا ہے۔ Interpolator ایک تبدیل شدہ قیمت لوٹاتا ہے — مثال کے طور پر، AccelerateInterpolator کے ساتھ 50% وقت پر اینیمیشن نے صرف ~25% راستہ طے کیا ہے، تیزی کی نقل کرتے ہوئے۔

ریاضیاتی طور پر، Interpolator کو فنکشن f(t) کے طور پر پیش کیا جا سکتا ہے، جہاں t معمول کا وقت [0, 1] ہے، اور f(t) معمول کی قیمت [0, 1] ہے (یا Overshoot/Bounce کے لیے وسیع تر)۔ LinearInterpolator f(t) = t لوٹاتا ہے — شے مستقل رفتار سے چلتی ہے۔ AccelerateInterpolator f(t) = t² کا تخمینہ لگاتا ہے، DecelerateInterpolator f(t) = 1 − (1 − t)² کا تخمینہ لگاتا ہے، ہموار آغاز یا اختتام پیدا کرتا ہے۔ Android Animation Framework میں، Interpolator ValueAnimator، ObjectAnimator اور ViewPropertyAnimator دونوں پر لاگو ہوتا ہے، تمام سطحوں پر رفتار کنٹرول کے لیے ایک متحد نقطہ نظر فراہم کرتا ہے۔

Android کے بلٹ ان انٹرپولیٹر

Android 9 بلٹ ان انٹرپولیٹر پیش کرتا ہے، ہر ایک اپنے ریاضیاتی ماڈل کے ساتھ۔ انٹرپولیٹر کا انتخاب اینیمیشن کے کردار کا تعین کرتا ہے: طبعیت (Bounce)، لچک (Overshoot) یا ہمواری (AccelerateDecelerate)۔

انٹرپولیٹر ریاضی استعمال کی صورت
LinearInterpolator f(t) = t پیشرفت کے اشارے، چلتا ہوا متن
AccelerateInterpolator f(t) = tⁿ (n=2) عنصر اسکرین سے باہر اڑتا ہے، نیچے سے ظاہر ہوتا ہے
DecelerateInterpolator f(t) = 1 − (1 − t)ⁿ گرتی ہوئی شے، اوپر سے سستی کے ساتھ داخل ہونا
AccelerateDecelerateInterpolator cos تخمینہ عالمگیر، عناصر کا ظاہر/غائب ہونا
AnticipateInterpolator پیچھے ہٹنے کے ساتھ مکعب لچک دار داخلہ — شے شروع کرنے سے پہلے تھوڑی پیچھے ہٹتی ہے
OvershootInterpolator زیادتی کے ساتھ مکعب ایکشن بٹن — ہدف کی پوزیشن سے تھوڑا آگے نکل جاتا ہے
AnticipateOvershootInterpolator Anticipate + Overshoot کا مجموعہ کارڈ — پیچھے ہٹنا + واپسی کے ساتھ زیادتی
BounceInterpolator مخفی اچھال گیند، سطح پر گرنے والا عنصر
PathInterpolator مکعب Bezier (2 کنٹرول پوائنٹس) ڈیزائن سسٹم کے لیے کسٹم منحنیات

ہر انٹرپولیٹر کے پاس res/interpolator/ میں XML اعلامیہ اور android.view.animation پیکج میں Kotlin کلاس ہے۔ AccelerateDecelerateInterpolator سب سے زیادہ استعمال ہوتا ہے: اس کا منحنی CSS میں ease-in-out easing فنکشن سے مشابہ ہے۔ Material Design والی Android ایپلیکیشنز کے لیے، فلوٹنگ ایکشن بٹن (FAB) کے لیے OvershootInterpolator تجویز کیا جاتا ہے — یہ ظاہر ہونے پر اچھال کا اثر پیدا کرتا ہے۔

PathInterpolator: کسٹم منحنیات

PathInterpolator — Bezier منحنی پر مبنی ایک انٹرپولیٹر، جو Path آبجیکٹ کے ذریعے بیان کیا جاتا ہے۔ API 21 (Android 5.0) سے دستیاب ہے۔ رفتار منحنی کو بصری طور پر ڈیزائن کرنے کی اجازت دیتا ہے — ڈیزائنر منحنی کھینچتا ہے، ڈویلپر اسے کنٹرول پوائنٹ کوآرڈینیٹ کے ذریعے کوڈ میں منتقل کرتا ہے۔ صرف مکعب Bezier تعاون یافتہ ہے (دو کنٹرول پوائنٹس C1، C2)۔

PathInterpolator منحنی ہمیشہ نقطہ (0,0) سے شروع ہوتا ہے اور (1,1) پر ختم ہوتا ہے۔ کنٹرول پوائنٹس شکل کی وضاحت کرتے ہیں: (x1, y1) — نقطہ آغاز، (x2, y2) — نقطہ اختتام۔ x کی قدریں [0,1] کی حد میں ہونی چاہئیں — یہ وقت کے ساتھ یکسانیت کی ضمانت دیتا ہے۔ y کی قدریں [0,1] سے باہر جا سکتی ہیں — یہ زیادتی یا توقع کا اثر پیدا کرتا ہے۔ مثال کے طور پر، معیاری Material Design کنٹرول پوائنٹس (0.4, 0.0, 0.2, 1.0) کے ساتھ fast-out-slow-in منحنی استعمال کرتا ہے۔ IT Sectr میں ہم ہر ڈیزائن سسٹم کے لیے کسٹم PathInterpolator بناتے ہیں — یہ تمام اسکرینوں پر مستقل اینیمیشن کی ضمانت دیتا ہے۔

اپنا Interpolator بنانا

اگر بلٹ ان انٹرپولیٹر آپ کے منظر نامے کا احاطہ نہیں کرتے، تو Android TimeInterpolator انٹرفیس کو لاگو کرکے ایک کسٹم انٹرپولیٹر بنانے کی اجازت دیتا ہے۔ واحد طریقہ getInterpolation(input: Float): Float ہے۔ Input 0 سے 1 تک موجودہ اینیمیشن پیشرفت ہے؛ output تبدیل شدہ قیمت ہے۔ Output زیادتی یا اچھال کے اثرات کے لیے [0,1] سے باہر جا سکتا ہے۔

عام کسٹم انٹرپولیٹر: مخفی اچھال اثر (1.0 سے اوپر جا کر واپس آنا)، لچک دار اثر (سائنوسائیڈل مخفی)، مرحلہ انٹرپولیٹر (الگ الگ چھلانگیں)۔ کسٹم انٹرپولیٹر <interpolator> ٹیگ اور کلاس کی وضاحت کرکے XML کے ذریعے بھی بیان کیے جا سکتے ہیں۔ Android Studio میں Layout Inspector میں ایک بلٹ ان Interpolator پیش نظارہ ہے — یہ منتخب کردہ انٹرپولیٹر کے لیے حقیقی منحنی دکھاتا ہے، ڈیبگنگ کو آسان بناتا ہے۔

Kotlin میں کوڈ کی مثالیں

مثال 1: ValueAnimator کے ساتھ AccelerateDecelerateInterpolator

ہم آہنگ انٹرپولیٹر استعمال کرتے ہوئے بنیادی بٹن اسکیل اینیمیشن۔ ValueAnimator قیمت کو 1.0 سے 1.2 اور واپس تبدیل کرتا ہے، اور AccelerateDecelerateInterpolator حرکت کو ہموار بناتا ہے۔

kotlin
import android.animation.ValueAnimator
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.View

fun View.pulseAnimation() {
    ValueAnimator.ofFloat(1.0f, 1.2f).apply {
        duration = 300
        interpolator = AccelerateDecelerateInterpolator()
        repeatCount = 1
        repeatMode = ValueAnimator.REVERSE

        addUpdateListener { animator ->
            val scale = animator.animatedValue as Float
            this@pulseAnimation.scaleX = scale
            this@pulseAnimation.scaleY = scale
        }

        start()
    }
}

AccelerateDecelerateInterpolator شروع میں ہموار تیزی اور آخر میں ہموار سستی پیدا کرتا ہے۔ REVERSE موڈ اینیمیشن کو مخالف سمت میں دہراتا ہے، ایک نبض اثر پیدا کرتا ہے۔ یہ پیٹرن ایکشن بٹن کے لیے استعمال ہوتا ہے، صارف کی توجہ کلیدی انٹرفیس عنصر کی طرف مبذول کراتا ہے۔

مثال 2: کسٹم منحنی کے ساتھ PathInterpolator

زیادتی اثر کے ساتھ کسٹم منحنی — شے ہدف کی پوزیشن سے 10% آگے نکل جاتی ہے اور واپس آتی ہے۔ کنٹرول پوائنٹس (0.4, 0.0, 0.6, 1.3) زیادتی کے ساتھ تیز رفتار داخلے کی وضاحت کرتے ہیں۔

kotlin
import android.animation.ObjectAnimator
import android.graphics.Path
import android.view.animation.PathInterpolator
import android.view.View

fun View.slideWithOvershoot() {
    val path = Path().apply {
        cubicTo(0.4f, 0.0f, 0.6f, 1.3f, 1.0f, 1.0f)
    }
    val interpolator = PathInterpolator(path)

    ObjectAnimator.ofFloat(this, "translationY", 200f, 0f).apply {
        duration = 400
        interpolator = interpolator
        start()
    }
}

PathInterpolator مکعب Bezier منحنی کے ساتھ Path قبول کرتا ہے۔ مثال میں، عنصر ہدف کی پوزیشن (60% وقت پر y=1.3) سے آگے نکلتا ہے اور حتمی پوزیشن پر واپس آتا ہے۔ Path کو x محور کے ساتھ سختی سے یکسان ہونا چاہیے، ورنہ اینیمیشن پیچھے کی طرف چلے گی۔ تصدیق کے لیے، Android Studio میں Layout Inspector استعمال کریں۔

مثال 3: کسٹم BounceInterpolator

مخفی اچھال اثر کے ساتھ کسٹم انٹرپولیٹر۔ چار مخفی چکروں کے ساتھ TimeInterpolator کے ذریعے نفاذ۔

kotlin
import android.animation.TimeInterpolator

class DampedBounceInterpolator : TimeInterpolator {

    private val cycles = 4
    private val damping = 0.85f

    override fun getInterpolation(input: Float): Float {
        val t = input * cycles
        val decay = Math.pow(damping.toDouble(), cycles.toDouble()).toFloat()
        val peak = t - (Math.floor(t.toDouble())).toFloat()
        val bounce = Math.sin(peak * Math.PI).toFloat()
        return 1f - bounce * decay * (1f - input)
    }
}

کسٹم DampedBounceInterpolator 0.85 کے مخفی گتانک کے ساتھ 4 مخفی اچھال پیدا کرتا ہے۔ getInterpolation طریقہ لکیری انپٹ لیتا ہے اور بہار کے اثر کے ساتھ قیمت لوٹاتا ہے۔ IT Sectr میں ہم اس انٹرپولیٹر کو نوٹیفکیشن ظاہر ہونے کی اینیمیشن کے لیے استعمال کرتے ہیں — اچھال طبعیت کا احساس پیدا کرتا ہے اور توجہ مبذول کراتا ہے۔

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

AccelerateDecelerateInterpolator PathInterpolator سے کیسے مختلف ہے؟

AccelerateDecelerateInterpolator ایک ہم آہنگ منحنی پیدا کرتا ہے — شے شروع میں تیز ہوتی ہے اور آخر میں سست ہوتی ہے۔ PathInterpolator ایک کنٹرول پوائنٹ (مکعب Bezier) کے ساتھ Path کے ذریعے صوابدیدی منحنی کی وضاحت کرنے کی اجازت دیتا ہے۔ غیر ہم آہنگ رویے والی کسٹم اینیمیشن کے لیے (مثلاً، تیز شروع + سست اختتام)، کنٹرول پوائنٹس (0.2, 0.8, 0.4, 1.0) کے ساتھ PathInterpolator استعمال کریں۔

کیا میں Android میں اپنا Interpolator بنا سکتا ہوں؟

ہاں، TimeInterpolator انٹرفیس لاگو کریں اور getInterpolation(input: Float): Float طریقہ کو اوور رائڈ کریں۔ Input 0 سے 1 تک ایک جزوی قیمت ہے (اینیمیشن پیشرفت)، output حقیقی قیمت ہے۔ مثال کے طور پر، بہار جیسے رویے کے لیے 1 سے بڑی یا 0 سے چھوٹی قیمتیں واپس کرکے اچھال اثر لاگو کیا جاتا ہے۔ XML ٹیگ کے ذریعے انٹرپولیٹر رجسٹر کریں یا براہ راست کوڈ میں استعمال کریں۔

کیا PathInterpolator Android کے تمام ورژنز پر دستیاب ہے؟

PathInterpolator API 21 (Android 5.0 Lollipop) میں شامل کیا گیا تھا۔ پرانے ورژنز کے لیے، AccelerateDecelerateInterpolator یا کسٹم TimeInterpolator استعمال کریں۔ PathInterpolator صرف دو کنٹرول پوائنٹس کے ساتھ مکعب Bezier منحنیات کو سپورٹ کرتا ہے — سیدھی لکیریں اور مربعی منحنیات غلط انٹرپولیشن دے سکتے ہیں۔ پسماندہ مطابقت کے لیے، فال بیک کے طور پر AccelerateDecelerateInterpolator استعمال کریں۔

Material Design کس انٹرپولیٹر کی سفارش کرتا ہے؟

Material Design 3 عناصر کے ظاہر ہونے کے لیے کنٹرول پوائنٹس (0.4, 0.0, 0.2, 1.0) کے ساتھ fast-out-slow-in منحنی، غائب ہونے کے لیے linear-out-slow-in (0.0, 0.0, 0.2, 1.0) اور حرکت کے لیے fast-out-linear-in (0.4, 0.0, 1.0, 1.0) کی سفارش کرتا ہے۔ Android میں یہ منحنیات Material Components لائبریری کے FastOutSlowInInterpolator کلاس میں لاگو کی گئی ہیں۔

کیا Interpolator اینیمیشن کی کارکردگی کو متاثر کرتا ہے؟

کم سے کم۔ بلٹ ان انٹرپولیٹر فی فریم ایک ریاضیاتی عمل انجام دیتے ہیں — اوور ہیڈ نہ ہونے کے برابر ہے۔ بھاری حسابات (trigonometry، loops) والے کسٹم انٹرپولیٹر کمزور آلات پر micro-jank کا سبب بن سکتے ہیں۔ کنسٹرکٹر میں قدروں کا پہلے سے حساب لگا کر یا کیشنگ کے ساتھ TimeInterpolator استعمال کرکے بہتر بنائیں۔

خلاصہ

  • Interpolator — ایک ریاضیاتی فنکشن جو اینیمیشن کی لکیری پیشرفت کو غیر لکیری رفتار منحنی میں تبدیل کرتا ہے، حرکت کو قدرتی بناتا ہے۔
  • Android کے 9 بلٹ ان انٹرپولیٹر 90% منظرناموں کا احاطہ کرتے ہیں — لکیری حرکت سے طبعی اچھال تک۔
  • PathInterpolator (API 21+) درست اینیمیشن کنٹرول کے لیے دو کنٹرول پوائنٹس کے ساتھ کسٹم Bezier منحنی کی وضاحت کرتا ہے۔
  • TimeInterpolator — صوابدیدی ریاضی کے ساتھ کسٹم انٹرپولیٹر بنانے کے لیے ایک انٹرفیس۔
  • Material Design ظاہر ہونے کے لیے fast-out-slow-in، عناصر کے غائب ہونے کے لیے linear-out-slow-in تجویز کرتا ہے۔
  • AccelerateDecelerateInterpolator — ہموار شروع اور اختتام کے ساتھ ہم آہنگ اینیمیشن کے لیے ایک عالمگیر انتخاب۔
  • مخفی اچھال والے کسٹم انٹرپولیٹر اطلاعات اور انٹرایکٹو عناصر کے لیے طبعی رویہ پیدا کرتے ہیں۔

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

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

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

مزید پڑھیں