Interpolator — ano ito, mga kurba ng interpolation sa Android

May-akda: IT Sectr Nai-publish: 2026-03-02 Oras ng pagbabasa: 8 min
Interpolator — bahagi ng Android Animation Framework na tumutukoy sa mathematical curve ng pagbabago ng halaga ng animation sa paglipas ng panahon. Sa halip na linear na paggalaw (gumagalaw ang bagay sa patuloy na bilis) pinapayagan ng Interpolator na pabilisin, pabagalin, o paikot na baguhin ang animation, na lumilikha ng natural na pag-uugali. Nagbibigay ang Android ng 9 na built-in na interpolator: AccelerateInterpolator, DecelerateInterpolator, AccelerateDecelerateInterpolator, AnticipateInterpolator, OvershootInterpolator, BounceInterpolator, CycleInterpolator, LinearInterpolator at PathInterpolator. Ayon sa Android Developer Documentation, ang paggamit ng non-linear na Interpolator ay nagbabawas ng napapansing oras ng animation ng 25–40% — itinuturing ng gumagamit ang tugon na mas makinis at mas responsable. Sa IT Sectr ginagamit namin ang AccelerateDecelerateInterpolator para sa paglitaw ng mga elemento at OvershootInterpolator para sa mga pindutan ng aksyon.

Mga pangunahing punto

  • Interpolator — mathematical function na nagko-convert ng linear na pag-unlad ng animation (0→1) sa non-linear na kurba ng bilis.
  • 9 na built-in na interpolator sa Android: mula Linear hanggang Bounce — sumasaklaw sa 90% ng karaniwang mga sitwasyon ng animation.
  • PathInterpolator (API 21+) ay nagbibigay-daan sa pagtukoy ng arbitraryong Bezier curve na may dalawang control point.
  • TimeInterpolator — interface para sa paggawa ng custom na interpolator na may paraang getInterpolation().
  • AccelerateDecelerateInterpolator — simetriko na kurba: pagbilis sa simula, pagbagal sa dulo, pinaka-unibersal na pagpili.

Ano ang Interpolator?

Interpolator — interface sa Android na nagma-map ng fractional na halaga ng pag-unlad ng animation (mula 0.0 hanggang 1.0) sa aktwal na halaga na may binagong bilis. Kung ang animation ay tumatagal ng 300 millisecond, tinatawagan ng system ang Interpolator para sa bawat frame, na nagpapasa ng kasalukuyang pag-unlad. Ibinabalik ng Interpolator ang binagong halaga — halimbawa, para sa AccelerateInterpolator sa 50% ng oras, ang animation ay tumatahak lamang ng ~25% ng landas, na ginagaya ang pagbilis.

Sa matematika, maaaring katawanin ang Interpolator bilang function f(t), kung saan ang t ay ang normalized na oras [0, 1], at ang f(t) ay ang normalized na halaga [0, 1] (o mas malawak para sa Overshoot/Bounce). Ang linear na interpolator ay nagbabalik ng f(t) = t — gumagalaw ang bagay sa patuloy na bilis. Ang AccelerateInterpolator ay nag-aaproksima ng f(t) = t², ang DecelerateInterpolator — f(t) = 1 − (1 − t)², na lumilikha ng makinis na simula o pagtatapos. Sa Android Animation Framework, inilalapat ang Interpolator sa parehong ValueAnimator at ObjectAnimator at ViewPropertyAnimator, na nagbibigay ng pinag-isang diskarte sa pamamahala ng bilis sa lahat ng antas.

Mga built-in na interpolator ng Android

Nag-aalok ang Android ng 9 na built-in na interpolator, bawat isa ay may kanya-kanyang mathematical model. Ang pagpili ng interpolator ay tumutukoy sa karakter ng animation: pagiging pisikal (Bounce), pagiging elastic (Overshoot) o kinis (AccelerateDecelerate).

Interpolator Matematika Sitwasyon
LinearInterpolator f(t) = t Mga tagapagpahiwatig ng pag-unlad, tumatakbong teksto
AccelerateInterpolator f(t) = tⁿ (n=2) Paglabas ng elemento sa screen, paglitaw mula sa ibaba
DecelerateInterpolator f(t) = 1 − (1 − t)ⁿ Pagbagsak ng bagay, pagpasok mula sa itaas na may pagbagal
AccelerateDecelerateInterpolator Cos aproksimasyon Unibersal, paglitaw/paglaho ng mga elemento
AnticipateInterpolator Kubiko na may pag-atras Masprong pagpasok — bahagyang umatras ang bagay bago magsimula
OvershootInterpolator Kubiko na may paglampas Pindutan ng aksyon — bahagyang lumalampas sa target na posisyon
AnticipateOvershootInterpolator Kombinasyon ng Anticipate + Overshoot Mga kard — pag-atras + paglampas na may pagbabalik
BounceInterpolator Mga damped na talbog Bola, pagbagsak ng elemento sa ibabaw
PathInterpolator Kubikong Bezier (2 control point) Custom na mga kurba para sa sistema ng disenyo

Bawat interpolator ay may XML deklarasyon sa res/interpolator/ at Kotlin class sa package na android.view.animation. AccelerateDecelerateInterpolator — pinakamadalas gamitin: ang kurba nito ay kahawig ng easing function na ease-in-out sa CSS. Para sa mga Android application na may Material Design, inirerekomenda ang OvershootInterpolator para sa mga floating action button (FAB) — lumilikha ng epekto ng 'pagtalon' kapag lumilitaw.

PathInterpolator: custom na mga kurba

PathInterpolator — interpolator batay sa Bezier curve, na tinukoy sa pamamagitan ng Path object. Available mula API 21 (Android 5.0). Nagbibigay-daan sa biswal na pagdisenyo ng kurba ng bilis — gumuhit ang taga-disenyo ng kurba, inililipat ito ng developer sa code sa pamamagitan ng mga coordinate ng control point. Tanging kubikong Bezier (dalawang control point C1, C2) ang sinusuportahan.

Ang kurba ng PathInterpolator ay laging nagsisimula sa punto (0,0) at nagtatapos sa (1,1). Tinutukoy ng mga control point ang hugis: (x1, y1) — punto sa simula, (x2, y2) — sa dulo. Ang mga halaga ng x ay dapat nasa saklaw na [0,1] — ginagarantiyahan nito ang monotonisidad sa oras. Ang mga halaga ng y ay maaaring lumabas sa [0,1] — lumilikha ito ng epekto ng paglampas (overshoot) o pag-atras (anticipate). Halimbawa, ang karaniwang Material Design ay gumagamit ng fast-out-slow-in curve na may control point (0.4, 0.0, 0.2, 1.0). Sa IT Sectr gumagawa kami ng custom na PathInterpolator para sa bawat sistema ng disenyo — ginagarantiyahan nito ang pagkakapareho ng mga animation sa lahat ng screen.

Paglikha ng sarili mong Interpolator

Kung hindi saklaw ng mga built-in na interpolator ang sitwasyon, pinapayagan ng Android na lumikha ng sarili mo sa pamamagitan ng pagpapatupad ng interface na TimeInterpolator. Ang tanging paraan — getInterpolation(input: Float): Float. Input — kasalukuyang pag-unlad ng animation mula 0 hanggang 1; output — binagong halaga. Ang output ay maaaring lumabas sa [0,1] para sa mga epekto ng paglampas o pagtalbog.

Karaniwang custom na interpolator: bounce effect na may damping (paglabas sa 1.0 at pagbabalik), elastic effect (sinusoidal damping), step-interpolator (diskreto na pagtalon). Ang custom na interpolator ay maaari ring tukuyin sa pamamagitan ng XML gamit ang tag na <interpolator> at pagbanggit ng klase. Sa Android Studio mayroong built-in na preview ng Interpolator sa Layout Inspector — nagpapakita ng aktwal na kurba para sa napiling interpolator, pinapadali ang debugging.

Mga halimbawa ng code sa Kotlin

Halimbawa 1: AccelerateDecelerateInterpolator na may ValueAnimator

Batayang animation ng sukat ng pindutan gamit ang simetriko na interpolator. Binabago ng ValueAnimator ang halaga mula 1.0 hanggang 1.2 at pabalik, at ginagawang makinis ng AccelerateDecelerateInterpolator ang paggalaw.

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 lumilikha ng makinis na pagtaas sa simula at makinis na pagbabalik sa dulo. Ang paraang REVERSE ay inuulit ang animation sa kabaligtaran na direksyon, na lumilikha ng epekto ng pulsation. Ang pattern na ito ay ginagamit para sa mga pindutan ng aksyon, nakakaakit ng atensyon ng gumagamit sa pangunahing elemento ng interface.

Halimbawa 2: PathInterpolator na may custom na kurba

Custom na kurba na may overshoot effect — lumalampas ang bagay sa target na posisyon ng 10% at bumabalik. Tinutukoy ng mga control point (0.4, 0.0, 0.6, 1.3) ang pinabilis na pagpasok na may paglampas.

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 tumatanggap ng Path na may kubikong Bezier curve. Sa halimbawa, ang elemento ay 'lumalampas' sa target na posisyon (y=1.3 sa 60% ng oras) at bumabalik sa dulo. Ang Path ay dapat na mahigpit na monotoniko sa kahabaan ng x-axis, kung hindi ay babaliktad ang animation. Para sa pagpapatunay gamitin ang Layout Inspector sa Android Studio.

Halimbawa 3: Custom na BounceInterpolator

Sariling interpolator na may damped bounce effect. Pagpapatupad sa pamamagitan ng TimeInterpolator na may apat na cycle ng damping.

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

Ang custom na DampedBounceInterpolator ay lumilikha ng 4 na damped na talbog na may damping coefficient na 0.85. Ang paraang getInterpolation ay tumatanggap ng linear input at nagbabalik ng halaga na may epekto ng 'spring'. Sa IT Sectr ginagamit namin ang interpolator na ito para sa animation ng paglitaw ng mga notification — ang pagtalbog ay lumilikha ng pakiramdam ng pisikalidad at nakakaakit ng atensyon.

Mga madalas itanong

Ano ang pagkakaiba ng AccelerateDecelerateInterpolator sa PathInterpolator?

Ang AccelerateDecelerateInterpolator ay lumilikha ng simetriko na kurba — bumibilis ang bagay sa simula at bumabagal sa dulo. Pinapayagan ng PathInterpolator na tukuyin ang arbitraryong kurba sa pamamagitan ng Path na may control point (kubikong Bezier). Para sa custom na animation na may asimetriko na pag-uugali (halimbawa, mabilis na simula + mabagal na pagtatapos) gamitin ang PathInterpolator na may control point (0.2, 0.8, 0.4, 1.0).

Maaari bang lumikha ng sariling Interpolator sa Android?

Oo, ipatupad ang interface na TimeInterpolator at i-override ang paraang getInterpolation(input: Float): Float. Input — fractional na halaga mula 0 hanggang 1 (pag-unlad ng animation), output — aktwal na halaga. Halimbawa, ang bounce effect ay ipinatutupad sa pamamagitan ng pagbabalik ng mga halagang mas malaki sa 1 o mas maliit sa 0 para sa masprong pag-uugali. Irehistro ang interpolator sa pamamagitan ng XML tag na o gamitin nang direkta sa code.

Available ba ang PathInterpolator sa lahat ng bersyon ng Android?

Ang PathInterpolator ay idinagdag sa API 21 (Android 5.0 Lollipop). Para sa mas lumang bersyon gamitin ang AccelerateDecelerateInterpolator o custom na TimeInterpolator. Ang PathInterpolator ay sumusuporta lamang sa kubikong Bezier curve na may dalawang control point — ang mga tuwid na linya at quadratic curve ay maaaring magbigay ng maling interpolation. Para sa backward compatibility gamitin ang AccelerateDecelerateInterpolator bilang fallback.

Anong interpolator ang inirerekomenda ng Material Design?

Inirerekomenda ng Material Design 3 ang fast-out-slow-in curve na may control point (0.4, 0.0, 0.2, 1.0) para sa paglitaw ng mga elemento, linear-out-slow-in (0.0, 0.0, 0.2, 1.0) para sa paglaho at fast-out-linear-in (0.4, 0.0, 1.0, 1.0) para sa paggalaw. Sa Android ang mga curve na ito ay ipinatupad sa klaseng FastOutSlowInInterpolator mula sa library ng Material Components.

Nakakaapekto ba ang Interpolator sa pagganap ng animation?

Minimal. Ang mga built-in na interpolator ay nagsasagawa ng isang mathematical na operasyon bawat frame — ang overhead ay hindi napapansin. Ang custom na interpolator na may mabibigat na kalkulasyon (trigonometrya, mga loop) ay maaaring magdulot ng micro-jank sa mahinang mga device. I-optimize sa pamamagitan ng pre-kalkulasyon ng mga halaga sa constructor o gumamit ng TimeInterpolator na may caching.

Buod

  • Interpolator — mathematical function na nagko-convert ng linear na pag-unlad ng animation sa non-linear na kurba ng bilis, ginagawang natural ang paggalaw.
  • 9 na built-in na interpolator ng Android ay sumasaklaw sa 90% ng mga sitwasyon — mula sa linear na paggalaw hanggang sa pisikal na pagtalbog.
  • PathInterpolator (API 21+) ay tumutukoy ng custom na Bezier curve na may dalawang control point para sa tumpak na kontrol ng animation.
  • TimeInterpolator — interface para sa paglikha ng sariling interpolator na may arbitraryong matematika.
  • Inirerekomenda ng Material Design ang fast-out-slow-in para sa paglitaw, linear-out-slow-in para sa paglaho ng mga elemento.
  • AccelerateDecelerateInterpolator — unibersal na pagpili para sa simetriko na animation na may makinis na simula at dulo.
  • Ang custom na interpolator na may damped na pagtalbog ay lumilikha ng pisikal na pag-uugali para sa mga notification at interactive na elemento.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din