View Animation — застарели систем анимације Android API 1+, који ради са View објектима кроз Tween Animation (Alpha, Translate, Scale, Rotate). Google препоручује Property Animation (Animator) за све нове пројекте. Чланак објашњава принципе, типове, XML конфигурацију и разлоге напуштања.
Главно
View Animation — подсистем анимације Android-а који ради на нивоу View (API 1+). Користи четири типа Tween Animation: AlphaAnimation (провиднос), TranslateAnimation (померање), ScaleAnimation (размера) и RotateAnimation (ротација). Свака анимација се описује у XML датотеци у фолдеру res/anim/ или се креира програмски у Kotlin коду.
Механизам View Animation не мења стварна својства View-а — прецртава View на новој позицији, размери или провидносности, али повратни позив onTouchEvent() прима координате оригиналног положаја. Ово је кључно ограничење, познато као клик неусклађеност (click mismatch).
Према Android Developer Documentation (2026), Google означава View Animation као застарели API, почев од Android 3.0 (API 11). За нове пројекте препоручује се Property Animation — Animator, AnimatorSet и ObjectAnimator, који раде са стварним својствима објеката преко setter метода.
Tween Animation — анимација „између“ кључних кадрова: постављате почетно и крајње стање, а систем израчунава међукадрове. Android пружа четири стандардна типа, сваки са сопственим скупом параметара.
AlphaAnimation мења провиднос View-а од fromAlpha до toAlpha. Вредности од 0.0 (потпуно провидно) до 1.0 (потпуно видљиво). Подразумевано, анимација траје 300 ms. Параметар fillAfter=true оставља View у крајњем стању провидносности.
<!-- res/anim/fade_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"
android:fillAfter="true" />TranslateAnimation помера View из почетне позиције (fromXDelta, fromYDelta) у крајњу (toXDelta, toYDelta). Вредности се задају у пикселима, процентима родитеља или процентима самог View-а. На пример, 100% означава 100% ширине View-а.
ScaleAnimation скалира View у односу на тачку pivotX/pivotY. fromXScale=1.0, toXScale=2.0 удвостручује ширину. Параметар pivotType одређује у односу на шта се рачуна pivot: self, parent или absolute. Анимација размере не мења стварне димензије View-а — само приказ.
RotateAnimation ротира View око тачке pivot за угао од fromDegrees до toDegrees. Угао се мери у степенима: 0 — почетни положај, 360 — пуна ротација. За бесконачну ротацију користите repeatCount=INFINITE.
Разлика између View Animation и Property Animation (Animator) — фундаментална разлика у архитектури анимације Android-а. View Animation оперише само на приказу, Property Animation мења стварна својства објекта преко setter метода, што доводи до ажурирања распореда.
| Критеријум | View Animation | Property Animation |
|---|---|---|
| API ниво | API 1+ (застарео) | API 11+ (препоручен) |
| Шта анимира | Приказ View-а (canvas) | Својства објекта (setter) |
| Клик после анимације | На оригиналној позицији | На новој позицији |
| Типови анимација | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Не мења | Мења преко setLayoutParams |
| Перформансе | Високе (само canvas) | Средње (зависи од setter-а) |
View Animation се обично дефинише у XML датотекама res/anim/ са коренским елементом
<!-- res/anim/bounce.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator">
<translate
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration="600" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.3"
android:duration="600" />
</set>XML датотека се учитава преко AnimationUtils.loadAnimation(). Interpolator одређује закон промене параметра током времена: accelerate, decelerate, bounce, overshoot. Прилагођени Interpolator се креира преко XML ресурса @anim/interpolator_name.
Све Tween анимације подржавају атрибуте: duration (ms), startOffset (кашњење пре почетка), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Атрибут fillAfter одређује да ли View остаје у крајњем стању анимације након завршетка.
Иако се анимације обично дефинишу у XML-у, могу се креирати и програмски преко Kotlin-а. Програмски приступ је користан за динамичке параметре: вредност провидносности зависи од стања апликације, а не је статички задата.
// Програмско креирање AlphaAnimation-а у Kotlin-у
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.View
fun View.fadeOut(duration: Long = 500L, onEnd: () -> Unit = {}) {
val animation = AlphaAnimation(1.0f, 0.0f).apply {
this.duration = duration
fillAfter = true
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationEnd(animation: Animation?) { onEnd() }
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
startAnimation(animation)
}
// Учитавање анимације из XML-а
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — комбинација анимација
val set = AnimationSet(true).apply {
addAnimation(TranslateAnimation(0f, 200f, 0f, 0f).apply { duration = 400 })
addAnimation(RotateAnimation(0f, 360f).apply {
duration = 400
pivotX = view.width / 2f
pivotY = view.height / 2f
})
}
view.startAnimation(set)Метода startAnimation() додаје анимацију у ред за приказ View-а. За отказивање се користи clearAnimation(). Важно: fillAfter=true не мења LayoutParams — при поновном позивању startAnimation анимација почиње од почетног стања View-а, а не од последње приказаног.
View Animation има узак опсег примене у 2026. години: подршка за Android 4.x (API 16-19), где Property Animation може радити нестабилно; једноставни ефекти појављивања/нестајања који не захтевају промену LayoutParams; анимације у којима клик неусклађеност није критична (на пример, позадински елементи). За све остале случајеве, Google препоручује прелазак на ObjectAnimator или AnimatorSet.
Према Android Developers, Property Animation је 15-20% ефикаснија у коришћењу меморије, јер не ствара међукадрове canvas-а. Прелазак са View Animation на Property Animation такође елиминише проблем клик неусклађености: View након анимације прима додире на новој позицији.
Често постављана питања
View Animation мења само приказ View-а — након анимације View остаје на оригиналној позицији за догађаје додира. Property Animation мења стварна својства објекта, што ажурира LayoutParams и коректно обрађује кликове на новом положају.
Google је прогласио View Animation застарелом од Android 3.0 (API 11). Разлог — клик неусклађеност (click mismatch) и немогућност анимирања произвољних својстава објеката. Property Animation решава ове проблеме и препоручује се за све нове пројекте.
Може се користити, али се не препоручује. Дугме након TranslateAnimation-а ће се приказивати на новом месту, али кликови ће радити на оригиналној позицији. За дугмад користите Property Animation или компоненту са AnimatedVisibility у Jetpack Compose-у.
Позовите view.clearAnimation(). Ако је анимација покренута са fillAfter=true, View ће остати у крајњем стању. За присилни повратак у почетно стање позовите clearAnimation() и invalidate().
Завршни преглед
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође