Interpolator — bu nədir, Android-də interpolyasiya əyriləri

Müəllif: IT Sectr Dərc olunub: 2026-03-02 Oxuma vaxtı: 8 dəq
Interpolator — Android Animation Framework komponenti olub, zaman ərzində animasiya dəyərinin dəyişməsinin riyazi əyrisini müəyyən edir. Xətti hərəkət (obyekt sabit sürətlə hərəkət edir) əvəzinə Interpolator animasiyanı sürətləndirməyə, yavaşlatmağa və ya dövri olaraq dəyişdirməyə imkan verir, təbii davranış yaradır. Android 9 daxili interpolator təqdim edir: AccelerateInterpolator, DecelerateInterpolator, AccelerateDecelerateInterpolator, AnticipateInterpolator, OvershootInterpolator, BounceInterpolator, CycleInterpolator, LinearInterpolator və PathInterpolator. Android Developer Documentation-a görə, qeyri-xətti Interpolatorların istifadəsi qavranılan animasiya vaxtını 25–40% azaldır — istifadəçi cavabı daha hamar və həssas hesab edir. IT Sectr-də elementlərin görünməsi üçün AccelerateDecelerateInterpolator və hərəkət düymələri üçün OvershootInterpolator istifadə edirik.

Əsas məqamlar

  • Interpolator — animasiyanın xətti gedişini (0→1) qeyri-xətti sürət əyrisinə çevirən riyazi funksiyadır.
  • 9 daxili interpolator Android-də: Linear-dan Bounce-a qədər — animasiyanın tipik ssenarilərinin 90%-ni əhatə edir.
  • PathInterpolator (API 21+) iki nəzarət nöqtəsi ilə ixtiyari Bezier əyrisi təyin etməyə imkan verir.
  • TimeInterpolator — getInterpolation() metodu ilə xüsusi interpolatorlar yaratmaq üçün interfeys.
  • AccelerateDecelerateInterpolator — simmetrik əyri: başlanğıcda sürətlənmə, sonda yavaşlama, ən universal seçim.

Interpolator nədir?

Interpolator — Android-də animasiya gedişinin kəsr qiymətini (0.0-dan 1.0-a qədər) dəyişdirilmiş sürətlə faktiki qiymətə çevirən interfeysdir. Animasiya 300 millisaniyə davam edərsə, sistem hər kadr üçün Interpolator-u çağırır, cari irəliləyişi ötürür. Interpolator dəyişdirilmiş dəyər qaytarır — məsələn, AccelerateInterpolator üçün vaxtın 50%-də animasiya yolun yalnız ~25%-ni keçir, sürətlənməni simulyasiya edir.

Riyazi olaraq Interpolator f(t) funksiyası kimi təqdim edilə bilər, burada t — normallaşdırılmış vaxt [0, 1], f(t) isə normallaşdırılmış dəyərdir [0, 1] (və ya Overshoot/Bounce üçün daha geniş). Xətti interpolator f(t) = t qaytarır — obyekt sabit sürətlə hərəkət edir. AccelerateInterpolator f(t) = t², DecelerateInterpolator isə f(t) = 1 − (1 − t)² yaxınlaşmasını edir, hamar başlanğıc və ya sonluq yaradır. Android Animation Framework-də Interpolator həm ValueAnimator, həm də ObjectAnimator və ViewPropertyAnimator üçün tətbiq olunur ki, bu da bütün səviyyələrdə sürəti idarə etmək üçün vahid yanaşma verir.

Android-in daxili interpolatorları

Android 9 daxili interpolator təklif edir, hər biri öz riyazi modeli ilə. Interpolator seçimi animasiyanın xarakterini müəyyən edir: fizikilik (Bounce), elastiklik (Overshoot) və ya hamarlıq (AccelerateDecelerate).

Interpolator Riyaziyyat Ssenari
LinearInterpolator f(t) = t İrəliləyiş göstəriciləri, qaçış sətri
AccelerateInterpolator f(t) = tⁿ (n=2) Elementin ekrandan çıxması, aşağıdan görünmə
DecelerateInterpolator f(t) = 1 − (1 − t)ⁿ Obyektin düşməsi, yuxarıdan yavaşlama ilə giriş
AccelerateDecelerateInterpolator Cos yaxınlaşması Universal, elementlərin görünməsi/yox olması
AnticipateInterpolator Geri çəkilmə ilə kubik Yaylı giriş — obyekt başlamazdan əvvəl bir az geri çəkilir
OvershootInterpolator Aşırma ilə kubik Hərəkət düyməsi — hədəf mövqeyini bir az aşır
AnticipateOvershootInterpolator Anticipate + Overshoot kombinasiyası Kartlar — geri çəkilmə + qayıtma ilə aşırma
BounceInterpolator Sönən sıçrayışlar Top, elementin səthə düşməsi
PathInterpolator Kubik Bezier (2 nəzarət nöqtəsi) Dizayn sistemi üçün xüsusi əyrilər

Hər bir interpolatorun res/interpolator/ faylında XML bəyannaməsi və android.view.animation paketində Kotlin sinfi var. AccelerateDecelerateInterpolator — ən çox istifadə olunan: onun əyrisi CSS-də ease-in-out funksiyasını xatırladır. Material Design ilə Android tətbiqləri üçün floating action button (FAB) düymələri üçün OvershootInterpolator tövsiyə olunur — görünəndə „sıçrama" effekti yaradır.

PathInterpolator: xüsusi əyrilər

PathInterpolator — Path obyekti vasitəsilə təyin edilmiş Bezier əyrisinə əsaslanan interpolatordur. API 21-dən (Android 5.0) etibarən mövcuddur. Sürət əyrisini vizual olaraq dizayn etməyə imkan verir — dizayner əyrini çəkir, proqramçı onu nəzarət nöqtələrinin koordinatları vasitəsilə koda köçürür. Yalnız kubik Bezier (iki nəzarət nöqtəsi C1, C2) dəstəklənir.

PathInterpolator əyrisi həmişə (0,0) nöqtəsində başlayır və (1,1) nöqtəsində bitir. Nəzarət nöqtələri formanı müəyyən edir: (x1, y1) — başlanğıc nöqtəsi, (x2, y2) — son nöqtə. x dəyərləri [0,1] diapazonunda olmalıdır — bu, zamanla monotonluğu təmin edir. y dəyərləri [0,1] diapazonundan kənara çıxa bilər — bu, aşırma (overshoot) və ya geri çəkilmə (anticipate) effekti yaradır. Məsələn, standart Material Design (0.4, 0.0, 0.2, 1.0) nəzarət nöqtələri ilə fast-out-slow-in əyrisindən istifadə edir. IT Sectr-də hər bir dizayn sistemi üçün xüsusi PathInterpolator qururuq — bu, bütün ekranlarda animasiyaların vahidliyini təmin edir.

Öz Interpolatorunuzu yaratmaq

Daxili interpolatorlar ssenarini əhatə etmirsə, Android TimeInterpolator interfeysini tətbiq etməklə öz interpolatorunuzu yaratmağa imkan verir. Tək metod — getInterpolation(input: Float): Float. Input — 0-dan 1-ə qədər cari animasiya irəliləyişi; output — dəyişdirilmiş dəyər. Output aşırma və ya sıçrayış effektləri üçün [0,1] diapazonundan kənara çıxa bilər.

Tipik xüsusi interpolatorlar: sönən sıçrayış effekti (1.0-dan kənara çıxma və qayıtma), elastik effekt (sinusoidal sönmə), addım interpolatoru (diskret sıçrayışlar). Xüsusi interpolatorlar həmçinin XML vasitəsilə <interpolator> teqi və sinif göstərilməklə təyin edilə bilər. Android Studio-da Layout Inspector-da daxili Interpolator ön baxışı var — seçilmiş interpolator üçün real əyrini göstərir, bu da sazlamanı asanlaşdırır.

Kotlin-də kod nümunələri

Nümunə 1: AccelerateDecelerateInterpolator ValueAnimator ilə

Simmetrik interpolatordan istifadə edərək düymə miqyasının əsas animasiyası. ValueAnimator dəyəri 1.0-dan 1.2-yə və geriyə dəyişir, AccelerateDecelerateInterpolator isə hərəkəti hamar edir.

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 başlanğıcda hamar artım və sonda hamar qayıdış yaradır. REVERSE metodu animasiyanı tərs istiqamətdə təkrarlayaraq pulsasiya effekti yaradır. Bu nümunə hərəkət düymələri üçün istifadə olunur, istifadəçinin diqqətini interfeysin əsas elementinə cəlb edir.

Nümunə 2: PathInterpolator xüsusi əyri ilə

Aşırma effekti ilə xüsusi əyri — obyekt hədəf mövqeyini 10% aşır və qayıdır. (0.4, 0.0, 0.6, 1.3) nəzarət nöqtələri aşırma ilə sürətlənmiş girişi təyin edir.

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 kubik Bezier əyrisi ilə Path qəbul edir. Nümunədə element hədəf mövqeyini „aşır" (vaxtın 60%-də y=1.3) və finala qayıdır. Path x oxu boyunca ciddi monoton olmalıdır, əks halda animasiya geriyə gedəcək. Yoxlamaq üçün Android Studio-da Layout Inspector istifadə edin.

Nümunə 3: Xüsusi BounceInterpolator

Sönən sıçrayış effekti ilə öz interpolatoru. Dörd sönmə dövrü ilə TimeInterpolator vasitəsilə tətbiq.

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

Xüsusi DampedBounceInterpolator 0.85 sönmə əmsalı ilə 4 sönən sıçrayış yaradır. getInterpolation metodu xətti input qəbul edir və „yay" effekti ilə dəyər qaytarır. IT Sectr-də bu interpolatoru bildirişlərin görünmə animasiyası üçün istifadə edirik — sıçrayış fizikilik hissi yaradır və diqqəti cəlb edir.

Tez-tez verilən suallar

AccelerateDecelerateInterpolator PathInterpolator-dan nə ilə fərqlənir?

AccelerateDecelerateInterpolator simmetrik əyri yaradır — obyekt başlanğıcda sürətlənir və sonda yavaşlayır. PathInterpolator idarəetmə nöqtəsi ilə Path vasitəsilə ixtiyari əyri təyin etməyə imkan verir (kubik Bezier). Asimmetrik davranışı olan xüsusi animasiya üçün (məsələn, sürətli başlanğıc + yavaş sonluq) (0.2, 0.8, 0.4, 1.0) nəzarət nöqtələri ilə PathInterpolator istifadə edin.

Android-də öz Interpolatorunuzu yaratmaq mümkündürmü?

Bəli, TimeInterpolator interfeysini tətbiq edin və getInterpolation(input: Float): Float metodunu əvəz edin. Input — 0-dan 1-ə qədər kəsr dəyər (animasiya irəliləyişi), output — faktiki dəyər. Məsələn, bounce effekti yaylı davranış üçün 1-dən böyük və ya 0-dan kiçik dəyərlər qaytarmaqla həyata keçirilir. Interpolatoru XML teqi vasitəsilə qeydiyyatdan keçirin və ya birbaşa koddan istifadə edin.

PathInterpolator Android-in bütün versiyalarında mövcuddurmu?

PathInterpolator API 21-də (Android 5.0 Lollipop) əlavə edilmişdir. Köhnə versiyalar üçün AccelerateDecelerateInterpolator və ya xüsusi TimeInterpolator istifadə edin. PathInterpolator yalnız iki nəzarət nöqtəsi olan kubik Bezier əyrilərini dəstəkləyir — düz xətlər və kvadratik əyrilər düzgün olmayan interpolyasiya verə bilər. Geriyə uyğunluq üçün fallback olaraq AccelerateDecelerateInterpolator istifadə edin.

Material Design hansı interpolatoru tövsiyə edir?

Material Design 3 elementlərin görünməsi üçün (0.4, 0.0, 0.2, 1.0) nəzarət nöqtələri ilə fast-out-slow-in əyrisini, yox olma üçün linear-out-slow-in (0.0, 0.0, 0.2, 1.0) və hərəkət üçün fast-out-linear-in (0.4, 0.0, 1.0, 1.0) tövsiyə edir. Android-də bu əyrilər Material Components kitabxanasından FastOutSlowInInterpolator sinfində tətbiq edilmişdir.

Interpolator animasiya performansına təsir edirmi?

Minimal. Daxili interpolatorlar kadr başına bir riyazi əməliyyat yerinə yetirir — overhead nəzərə çarpmır. Ağır hesablamaları olan (triqonometriya, dövrlər) xüsusi interpolatorlar zəif cihazlarda micro-jank yarada bilər. Konstruktorda dəyərləri əvvəlcədən hesablamaqla optimallaşdırın və ya TimeInterpolator keşləmə ilə istifadə edin.

Nəticə

  • Interpolator — animasiyanın xətti gedişini qeyri-xətti sürət əyrisinə çevirən riyazi funksiyadır, hərəkəti təbii edir.
  • Android-in 9 daxili interpolatoru ssenarilərin 90%-ni əhatə edir — xətti hərəkətdən fiziki sıçrayışlara qədər.
  • PathInterpolator (API 21+) animasiyanın dəqiq idarəsi üçün iki nəzarət nöqtəsi ilə xüsusi Bezier əyrisi təyin edir.
  • TimeInterpolator — ixtiyari riyaziyyatla öz interpolatorlarını yaratmaq üçün interfeys.
  • Material Design görünmə üçün fast-out-slow-in, yox olma üçün linear-out-slow-in tövsiyə edir.
  • AccelerateDecelerateInterpolator — hamar başlanğıc və sonluqla simmetrik animasiyalar üçün universal seçim.
  • Sönən sıçrayışlarla xüsusi interpolatorlar bildirişlər və interaktiv elementlər üçün fiziki davranış yaradır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun