View Animation — какво е това, Tween Animation в Android

Автор: IT Sectr Публикувано: 2026-03-01 Време за четене: 8 мин

View Animation — остаряла система за анимация Android API 1+, която работи с View обекти чрез Tween Animation (Alpha, Translate, Scale, Rotate). Google препоръчва Property Animation (Animator) за всички нови проекти. Статията обяснява принципите, типовете, XML конфигурацията и причините за отказ.

Основни точки

  • View Animation — анимация на View чрез Tween Animation: Alpha, Translate, Scale, Rotate
  • XML дефиниция — анимациите се описват в res/anim/ с , , ,
  • AnimationSet — комбинация от няколко анимации в един набор с общи параметри
  • Ограничение — View Animation променя не свойствата, а само изобразяването: View остава на оригиналната позиция
  • Property Animation — модерен заместител (Animator), работещ с реални свойства на обекти

Какво е View Animation?

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

Tween Animation — анимация „между“ ключови кадри: задавате начално и крайно състояние, а системата изчислява междинните кадри. Android предоставя четири стандартни типа, всеки със собствен набор от параметри.

AlphaAnimation

AlphaAnimation променя прозрачността на View от fromAlpha до toAlpha. Стойности от 0.0 (напълно прозрачно) до 1.0 (напълно видимо). По подразбиране анимацията трае 300 ms. Параметърът fillAfter=true оставя View в крайното състояние на прозрачност.

xml
<!-- 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

TranslateAnimation премества View от началната позиция (fromXDelta, fromYDelta) до крайната позиция (toXDelta, toYDelta). Стойностите се задават в пиксели, проценти от родителя или проценти от самия View. Например 100% означава 100% от ширината на View.

ScaleAnimation

ScaleAnimation мащабира View спрямо точката pivotX/pivotY. fromXScale=1.0, toXScale=2.0 удвоява ширината. Параметърът pivotType определя спрямо какво се изчислява pivot: self, parent или absolute. Анимацията на мащаб не променя реалните размери на View — само изобразяването.

RotateAnimation

RotateAnimation завърта View около точката pivot на ъгъл от fromDegrees до toDegrees. Ъгълът се измерва в градуси: 0 — изходна позиция, 360 — пълно завъртане. За безкрайно въртене използвайте repeatCount=INFINITE.

View Animation срещу Property Animation

Разликата между View Animation и Property Animation (Animator) — фундаментална разлика в архитектурата на анимацията в Android. View Animation работи само върху изобразяването, Property Animation променя реалните свойства на обекта чрез setter методи, което води до актуализиране на оформлението.

КритерийView AnimationProperty Animation
API нивоAPI 1+ (остарял)API 11+ (препоръчителен)
Какво анимираИзобразяване на View (canvas)Свойства на обект (setter)
Кликване след анимацияНа оригиналната позицияНа новата позиция
Типове анимации4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsНе променяПроменя чрез setLayoutParams
ПроизводителностВисока (само canvas)Средна (зависи от setter)

XML конфигурация на анимации

View Animation обикновено се дефинира в XML файлове в res/anim/ с коренов елемент (AnimationSet) или един от четирите типа. AnimationSet позволява комбиниране на анимации с общи параметри startOffset, duration, interpolator.

xml
<!-- 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 остава в крайното състояние на анимацията след завършване.

Примери за код в Kotlin

Въпреки че анимациите обикновено се дефинират в XML, те могат да се създават и програмно чрез Kotlin. Програмният подход е полезен за динамични параметри: стойността на прозрачност зависи от състоянието на приложението, а не е статично зададена.

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?

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 и Property Animation?

View Animation променя само изобразяването на View — след анимация View остава на оригиналната позиция за събития на докосване. Property Animation променя реалните свойства на обекта, което актуализира LayoutParams и правилно обработва кликванията на новата позиция.

Защо View Animation се счита за остаряла?

Google обяви View Animation за остаряла от Android 3.0 (API 11). Причина — несъответствие на кликване (click mismatch) и невъзможност за анимиране на произволни свойства на обекти. Property Animation решава тези проблеми и се препоръчва за всички нови проекти.

Може ли да се използва View Animation за анимация на бутони?

Може да се използва, но не се препоръчва. Бутонът след TranslateAnimation ще се показва на новото място, но кликванията ще работят на оригиналната позиция. За бутони използвайте Property Animation или компонента с AnimatedVisibility в Jetpack Compose.

Как да отменим View Animation програмно?

Извикайте view.clearAnimation(). Ако анимацията е стартирана с fillAfter=true, View ще остане в крайното състояние. За принудително връщане в началното състояние извикайте clearAnimation() и invalidate().

Обобщение

  • View Animation — остаряла система за Tween анимации в Android с четири типа: Alpha, Translate, Scale, Rotate
  • XML дефиниция в res/anim/ с елементи , , , и корен
  • AnimationSet комбинира анимации с общ startOffset, duration, interpolator
  • Несъответствие на кликване — View след анимация остава на оригиналната позиция за събития на докосване
  • Property Animation — модерен заместител чрез ObjectAnimator, AnimatorSet, работещ с реални свойства
  • fillAfter оставя View в крайното състояние, но не променя LayoutParams
  • Миграция към Property Animation елиминира несъответствието на кликване и подобрява производителността с 15-20%

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също