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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें