Interpolator — bu nima, Android-da interpolyatsiya egri chiziqlari

Muallif: IT Sectr Nashr etilgan: 2026-03-02 O'qish vaqti: 8 daq
Interpolator — Android Animation Framework komponenti bo'lib, vaqt davomida animatsiya qiymati o'zgarishining matematik egri chizig'ini aniqlaydi. Chiziqli harakat (ob'ekt doimiy tezlik bilan harakat qiladi) o'rniga Interpolator animatsiyani tezlashtirish, sekinlashtirish yoki davriy ravishda o'zgartirish imkonini beradi, tabiiy xatti-harakat yaratadi. Android 9 ta o'rnatilgan interpolatorni taqdim etadi: AccelerateInterpolator, DecelerateInterpolator, AccelerateDecelerateInterpolator, AnticipateInterpolator, OvershootInterpolator, BounceInterpolator, CycleInterpolator, LinearInterpolator va PathInterpolator. Android Developer Documentation-ga ko'ra, chiziqli bo'lmagan Interpolatorlardan foydalanish qabul qilinadigan animatsiya vaqtini 25–40% ga qisqartiradi — foydalanuvchi javobni yanada silliq va sezgir deb hisoblaydi. IT Sectr-da elementlarning paydo bo'lishi uchun AccelerateDecelerateInterpolator va harakat tugmalari uchun OvershootInterpolator dan foydalanamiz.

Asosiy fikrlar

  • Interpolator — animatsiyaning chiziqli borishini (0→1) chiziqli bo'lmagan tezlik egri chizig'iga aylantiruvchi matematik funksiya.
  • 9 ta o'rnatilgan interpolator Android-da: Linear dan Bounce gacha — animatsiyaning tipik stsenariylarining 90% ini qamrab oladi.
  • PathInterpolator (API 21+) ikkita nazorat nuqtasi bilan ixtiyoriy Bezier egri chizig'ini belgilash imkonini beradi.
  • TimeInterpolator — getInterpolation() metodi bilan maxsus interpolatorlar yaratish uchun interfeys.
  • AccelerateDecelerateInterpolator — simmetrik egri chiziq: boshida tezlashish, oxirida sekinlashish, eng universal tanlov.

Interpolator nima?

Interpolator — Android-da animatsiya jarayonining kasr qiymatini (0.0 dan 1.0 gacha) o'zgartirilgan tezlik bilan haqiqiy qiymatga aks ettiruvchi interfeys. Agar animatsiya 300 millisekund davom etsa, tizim har bir kadr uchun Interpolator-ni chaqiradi, joriy taraqqiyotni uzatadi. Interpolator o'zgartirilgan qiymatni qaytaradi — masalan, AccelerateInterpolator uchun vaqtning 50% ida animatsiya yo'lining faqat ~25% ini bosib o'tadi, tezlashishni simulyatsiya qiladi.

Matematik jihatdan Interpolator f(t) funksiyasi sifatida ifodalanishi mumkin, bu erda t — normallashtirilgan vaqt [0, 1], f(t) esa normallashtirilgan qiymat [0, 1] (yoki Overshoot/Bounce uchun kengroq). Chiziqli interpolator f(t) = t qaytaradi — ob'ekt doimiy tezlik bilan harakat qiladi. AccelerateInterpolator f(t) = t², DecelerateInterpolator esa f(t) = 1 − (1 − t)² yaqinlashishini amalga oshiradi, silliq boshlanish yoki tugash yaratadi. Android Animation Framework-da Interpolator ValueAnimator, ObjectAnimator va ViewPropertyAnimator uchun qo'llaniladi, bu barcha darajalarda tezlikni boshqarishning yagona yondashuvini beradi.

Android-ning o'rnatilgan interpolatorlari

Android 9 ta o'rnatilgan interpolatorni taklif qiladi, har biri o'z matematik modeliga ega. Interpolator tanlovi animatsiyaning xarakterini belgilaydi: fiziklik (Bounce), elastiklik (Overshoot) yoki silliqlik (AccelerateDecelerate).

Interpolator Matematika Stsenariy
LinearInterpolator f(t) = t Taraqqiyot ko'rsatkichlari, yuguruvchi satr
AccelerateInterpolator f(t) = tⁿ (n=2) Elementning ekrandan chiqishi, pastdan paydo bo'lishi
DecelerateInterpolator f(t) = 1 − (1 − t)ⁿ Ob'ektning tushishi, yuqoridan sekinlashish bilan kirish
AccelerateDecelerateInterpolator Cos yaqinlashishi Universal, elementlarning paydo bo'lishi/yo'qolishi
AnticipateInterpolator Orqaga tortilish bilan kubik Prujinali kirish — ob'ekt boshlashdan oldin biroz orqaga ketadi
OvershootInterpolator Oshirib yuborish bilan kubik Harakat tugmasi — maqsadli pozitsiyani biroz oshirib yuboradi
AnticipateOvershootInterpolator Anticipate + Overshoot kombinatsiyasi Kartalar — orqaga tortilish + qaytish bilan oshirib yuborish
BounceInterpolator So'nuvchi sakrashlar To'p, elementning sirtga tushishi
PathInterpolator Kubik Bezier (2 ta nazorat nuqtasi) Dizayn tizimi uchun maxsus egri chiziqlar

Har bir interpolator res/interpolator/ da XML deklaratsiyasiga va android.view.animation paketida Kotlin sinfiga ega. AccelerateDecelerateInterpolator — eng ko'p ishlatiladigan: uning egri chizig'i CSS-dagi ease-in-out funksiyasini eslatadi. Material Design bilan Android ilovalari uchun floating action button (FAB) tugmalari uchun OvershootInterpolator tavsiya etiladi — paydo bo'lganda „sakrash" effektini yaratadi.

PathInterpolator: maxsus egri chiziqlar

PathInterpolator — Path obyekti orqali aniqlangan Bezier egri chizig'iga asoslangan interpolator. API 21 (Android 5.0) dan boshlab mavjud. Tezlik egri chizig'ini vizual ravishda loyihalash imkonini beradi — dizayner egri chiziqni chizadi, dasturchi uni nazorat nuqtalarining koordinatalari orqali kodga o'tkazadi. Faqat kubik Bezier (ikkita nazorat nuqtasi C1, C2) qo'llab-quvvatlanadi.

PathInterpolator egri chizig'i har doim (0,0) nuqtasida boshlanadi va (1,1) nuqtasida tugaydi. Nazorat nuqtalari shaklni aniqlaydi: (x1, y1) — boshidagi nuqta, (x2, y2) — oxiridagi nuqta. x qiymatlari [0,1] oralig'ida bo'lishi kerak — bu vaqt bo'yicha monotonlikni kafolatlaydi. y qiymatlari [0,1] dan tashqariga chiqishi mumkin — bu oshirib yuborish (overshoot) yoki orqaga tortilish (anticipate) effektini yaratadi. Masalan, standart Material Design (0.4, 0.0, 0.2, 1.0) nazorat nuqtalari bilan fast-out-slow-in egri chizig'idan foydalanadi. IT Sectr-da har bir dizayn tizimi uchun maxsus PathInterpolator quramiz — bu barcha ekranlarda animatsiyalarning bir xilligini kafolatlaydi.

O'z Interpolatoringizni yaratish

Agar o'rnatilgan interpolatorlar stsenariyni qamrab olmasa, Android TimeInterpolator interfeysini amalga oshirish orqali o'z interpolatoringizni yaratishga imkon beradi. Yagona metod — getInterpolation(input: Float): Float. Input — 0 dan 1 gacha bo'lgan joriy animatsiya taraqqiyoti; output — o'zgartirilgan qiymat. Output oshirib yuborish yoki sakrash effektlari uchun [0,1] dan tashqariga chiqishi mumkin.

Odatdagi maxsus interpolatorlar: so'nuvchi sakrash effekti (1.0 dan tashqariga chiqish va qaytish), elastik effekt (sinusoidal so'nish), qadam interpolatori (diskret sakrashlar). Maxsus interpolatorlar XML orqali <interpolator> tegi va sinf ko'rsatilishi bilan ham aniqlanishi mumkin. Android Studio-da Layout Inspector da o'rnatilgan Interpolator oldindan ko'rish mavjud — tanlangan interpolator uchun haqiqiy egri chiziqni ko'rsatadi, bu disk raskadrovkani osonlashtiradi.

Kotlin-da kod misollari

Misol 1: AccelerateDecelerateInterpolator ValueAnimator bilan

Simmetrik interpolatordan foydalanib tugma masshtabining asosiy animatsiyasi. ValueAnimator qiymatni 1.0 dan 1.2 gacha va orqaga o'zgartiradi, AccelerateDecelerateInterpolator esa harakatni silliq qiladi.

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 boshida silliq o'sish va oxirida silliq qaytish yaratadi. REVERSE metodi animatsiyani teskari yo'nalishda takrorlab, pulsatsiya effektini yaratadi. Ushbu naqsh harakat tugmalari uchun ishlatiladi, foydalanuvchi diqqatini interfeysning asosiy elementiga jalb qiladi.

Misol 2: PathInterpolator maxsus egri chiziq bilan

Oshirib yuborish effekti bilan maxsus egri chiziq — ob'ekt maqsadli pozitsiyani 10% ga oshirib yuboradi va qaytadi. (0.4, 0.0, 0.6, 1.3) nazorat nuqtalari oshirib yuborish bilan tezlashtirilgan kirishni belgilaydi.

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 egri chizig'i bilan Path ni qabul qiladi. Misolda element maqsadli pozitsiyani «oshib yuboradi» (vaqtning 60% ida y=1.3) va finalga qaytadi. Path x o'qi bo'ylab qat'iy monoton bo'lishi kerak, aks holda animatsiya orqaga ketadi. Tekshirish uchun Android Studio-da Layout Inspector dan foydalaning.

Misol 3: Maxsus BounceInterpolator

So'nuvchi sakrash effekti bilan o'z interpolatori. To'rtta so'nish sikli bilan TimeInterpolator orqali amalga oshirish.

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

Maxsus DampedBounceInterpolator 0.85 so'nish koeffitsienti bilan 4 ta so'nuvchi sakrash yaratadi. getInterpolation metodi chiziqli input ni qabul qiladi va «prujina» effekti bilan qiymat qaytaradi. IT Sectr-da bu interpolatordan bildirishnomalarning paydo bo'lish animatsiyasi uchun foydalanamiz — sakrash fiziklik hissini yaratadi va diqqatni jalb qiladi.

Tez-tez beriladigan savollar

AccelerateDecelerateInterpolator PathInterpolatordan qanday farq qiladi?

AccelerateDecelerateInterpolator simmetrik egri chiziq yaratadi — ob'ekt boshida tezlashadi va oxirida sekinlashadi. PathInterpolator nazorat nuqtasi bilan Path orqali ixtiyoriy egri chiziqni belgilash imkonini beradi (kubik Bezier). Asimmetrik xatti-harakatga ega maxsus animatsiya uchun (masalan, tez boshlanish + sekin tugash) (0.2, 0.8, 0.4, 1.0) nazorat nuqtalari bilan PathInterpolator dan foydalaning.

Android-da o'z Interpolatoringizni yaratish mumkinmi?

Ha, TimeInterpolator interfeysini amalga oshiring va getInterpolation(input: Float): Float metodini bekor qiling. Input — 0 dan 1 gacha kasr qiymat (animatsiya taraqqiyoti), output — haqiqiy qiymat. Masalan, bounce effekti prujinasimon xatti-harakat uchun 1 dan katta yoki 0 dan kichik qiymatlarni qaytarish orqali amalga oshiriladi. Interpolatorni XML tegi orqali ro'yxatdan o'tkazing yoki to'g'ridan-to'g'ri kodda foydalaning.

PathInterpolator Android-ning barcha versiyalarida mavjudmi?

PathInterpolator API 21 da (Android 5.0 Lollipop) qo'shilgan. Eski versiyalar uchun AccelerateDecelerateInterpolator yoki maxsus TimeInterpolator dan foydalaning. PathInterpolator faqat ikkita nazorat nuqtasi bo'lgan kubik Bezier egri chiziqlarini qo'llab-quvvatlaydi — to'g'ri chiziqlar va kvadratik egri chiziqlar noto'g'ri interpolyatsiya berishi mumkin. Orqaga moslik uchun fallback sifatida AccelerateDecelerateInterpolator dan foydalaning.

Material Design qaysi interpolatorni tavsiya qiladi?

Material Design 3 elementlarning paydo bo'lishi uchun (0.4, 0.0, 0.2, 1.0) nazorat nuqtalari bilan fast-out-slow-in egri chizig'ini, yo'qolishi uchun linear-out-slow-in (0.0, 0.0, 0.2, 1.0) va harakat uchun fast-out-linear-in (0.4, 0.0, 1.0, 1.0) ni tavsiya qiladi. Android-da bu egri chiziqlar Material Components kutubxonasidan FastOutSlowInInterpolator sinfida amalga oshirilgan.

Interpolator animatsiya unumdorligiga ta'sir qiladimi?

Minimal. O'rnatilgan interpolatorlar kadr boshiga bitta matematik operatsiyani bajaradi — overhead sezilmaydi. Og'ir hisob-kitoblarga ega (trigonometriya, sikllar) maxsus interpolatorlar zaif qurilmalarda micro-jank keltirib chiqarishi mumkin. Konstruktorda qiymatlarni oldindan hisoblash orqali optimallashtiring yoki TimeInterpolator ni keshlash bilan foydalaning.

Xulosa

  • Interpolator — animatsiyaning chiziqli borishini chiziqli bo'lmagan tezlik egri chizig'iga aylantiruvchi matematik funksiya, harakatni tabiiy qiladi.
  • Android-ning 9 ta o'rnatilgan interpolatori stsenariylarning 90% ini qamrab oladi — chiziqli harakatdan fizik sakrashlargacha.
  • PathInterpolator (API 21+) animatsiyani aniq boshqarish uchun ikkita nazorat nuqtasi bilan maxsus Bezier egri chizig'ini belgilaydi.
  • TimeInterpolator — ixtiyoriy matematika bilan o'z interpolatorlarini yaratish uchun interfeys.
  • Material Design paydo bo'lish uchun fast-out-slow-in, yo'qolish uchun linear-out-slow-in ni tavsiya qiladi.
  • AccelerateDecelerateInterpolator — silliq boshlanish va tugash bilan simmetrik animatsiyalar uchun universal tanlov.
  • So'nuvchi sakrashlar bilan maxsus interpolatorlar bildirishnomalar va interaktiv elementlar uchun fizik xatti-harakat yaratadi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing