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% কমিয়ে দেয় — ব্যবহারকারী প্রতিক্রিয়াকে মসৃণ এবং আরও সংবেদনশীল মনে করেন। 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)কে পরিবর্তিত গতি সহ প্রকৃত মানে ম্যাপ করে। যদি একটি অ্যানিমেশন 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 ইজিং ফাংশনের মতো। 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-এ আমরা প্রতিটি ডিজাইন সিস্টেমের জন্য কাস্টম PathInterpolators তৈরি করি — এটি সমস্ত স্ক্রিনে ধারাবাহিক অ্যানিমেশন নিশ্চিত করে।

নিজের 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 কি অ্যানিমেশন কর্মক্ষমতা প্রভাবিত করে?

সর্বনিম্ন। অন্তর্নির্মিত ইন্টারপোলেটরগুলি প্রতি ফ্রেমে একটি গাণিতিক অপারেশন সম্পাদন করে — ওভারহেড নগণ্য। ভারী গণনা (ত্রিকোণমিতি, লুপ) সহ কাস্টম ইন্টারপোলেটরগুলি দুর্বল ডিভাইসে 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন