View Animation — isang lumang sistema ng animasyon ng Android API 1+ na gumagana sa mga View object sa pamamagitan ng Tween Animation (Alpha, Translate, Scale, Rotate). Inirerekomenda ng Google ang Property Animation (Animator) para sa lahat ng bagong proyekto. Ipinapaliwanag ng artikulo ang mga prinsipyo, uri, XML configuration, at mga dahilan ng pagtigil.
Mga Pangunahing Punto
View Animation — subsistema ng animasyon ng Android na gumagana sa antas ng View (API 1+). Gumagamit ito ng apat na uri ng Tween Animation: AlphaAnimation (transparency), TranslateAnimation (paglipat), ScaleAnimation (scale), at RotateAnimation (pag-ikot). Bawat animasyon ay inilalarawan sa isang XML file sa folder na res/anim/ o ginagawa nang programmatically sa Kotlin code.
Ang mekanismo ng View Animation ay hindi nagbabago ng tunay na mga property ng View — iginuguhit nito muli ang View sa bagong posisyon, scale, o transparency, ngunit ang callback na onTouchEvent() ay tumatanggap ng mga coordinate ng orihinal na lokasyon. Ito ang pangunahing limitasyon, na kilala bilang click mismatch.
Ayon sa Android Developer Documentation (2026), minamarkahan ng Google ang View Animation bilang lumang API, simula sa Android 3.0 (API 11). Para sa mga bagong proyekto, inirerekomenda ang Property Animation — Animator, AnimatorSet at ObjectAnimator, na gumagana sa tunay na mga property ng object sa pamamagitan ng setter method.
Tween Animation — animasyon “sa pagitan” ng mga key frame: itinakda mo ang simula at wakas na estado, at kinakalkula ng system ang mga intermediate frame. Nagbibigay ang Android ng apat na karaniwang uri, bawat isa ay may sariling set ng parameter.
AlphaAnimation binabago ang transparency ng View mula fromAlpha hanggang toAlpha. Mga halaga mula 0.0 (ganap na transparent) hanggang 1.0 (ganap na nakikita). Bilang default, ang animasyon ay tumatagal ng 300 ms. Ang parameter na fillAfter=true ay nag-iiwan ng View sa huling estado ng transparency.
<!-- 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 inililipat ang View mula sa panimulang posisyon (fromXDelta, fromYDelta) patungo sa huling posisyon (toXDelta, toYDelta). Ang mga halaga ay ibinibigay sa pixels, porsyento ng magulang, o porsyento ng View mismo. Halimbawa, 100% ay nangangahulugang 100% ng lapad ng View.
ScaleAnimation iskala ang View kaugnay sa punto pivotX/pivotY. fromXScale=1.0, toXScale=2.0 ay nagdodoble ng lapad. Tinutukoy ng parameter na pivotType kung saan kaugnay kinakalkula ang pivot: self, parent, o absolute. Ang animasyon ng scale ay hindi nagbabago ng tunay na sukat ng View — tanging rendering.
RotateAnimation iniikot ang View sa paligid ng punto pivot sa anggulo mula fromDegrees hanggang toDegrees. Ang anggulo ay sinusukat sa degrees: 0 — panimulang posisyon, 360 — buong ikot. Para sa walang katapusang pag-ikot, gamitin ang repeatCount=INFINITE.
Ang pagkakaiba sa pagitan ng View Animation at Property Animation (Animator) — pangunahing pagkakaiba sa arkitektura ng animasyon ng Android. Ang View Animation ay gumagana lamang sa rendering, ang Property Animation ay nagbabago ng tunay na mga property ng object sa pamamagitan ng setter method, na humahantong sa pag-update ng layout.
| Kriterya | View Animation | Property Animation |
|---|---|---|
| Antas ng API | API 1+ (luma) | API 11+ (inirerekomenda) |
| Ano ang ina-animate | Rendering ng View (canvas) | Property ng object (setter) |
| Click pagkatapos ng animasyon | Sa orihinal na posisyon | Sa bagong posisyon |
| Mga uri ng animasyon | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Hindi nagbabago | Nagbabago sa pamamagitan ng setLayoutParams |
| Pagganap | Mataas (canvas lang) | Katamtaman (depende sa setter) |
View Animation ay karaniwang tinutukoy sa mga XML file na res/anim/ na may root element na
<!-- 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>Ang XML file ay nilo-load sa pamamagitan ng AnimationUtils.loadAnimation(). Tinutukoy ng Interpolator ang batas ng pagbabago ng parameter sa paglipas ng panahon: accelerate, decelerate, bounce, overshoot. Ang custom na Interpolator ay ginagawa sa pamamagitan ng XML resource na @anim/interpolator_name.
Lahat ng Tween animasyon ay sumusuporta sa mga attribute: duration (ms), startOffset (pagkaantala bago magsimula), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Tinutukoy ng attribute na fillAfter kung ang View ay mananatili sa huling estado ng animasyon pagkatapos ng pagkumpleto.
Kahit na ang mga animasyon ay karaniwang tinutukoy sa XML, maaari rin itong gawin nang programmatically sa pamamagitan ng Kotlin. Ang programmatic approach ay kapaki-pakinabang para sa mga dynamic na parameter: ang halaga ng transparency ay depende sa estado ng app, hindi itinakda nang statically.
// Programmatic na paggawa ng AlphaAnimation sa 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)
}
// Paglo-load ng animasyon mula sa XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — kombinasyon ng mga animasyon
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)Ang pamamaraang startAnimation() ay nagdaragdag ng animasyon sa rendering queue ng View. Para sa pagkansela, ginagamit ang clearAnimation(). Mahalaga: ang fillAfter=true ay hindi nagbabago ng LayoutParams — kapag muling tinawag ang startAnimation, ang animasyon ay nagsisimula mula sa panimulang estado ng View, hindi mula sa huling na-render na estado.
View Animation ay may makitid na saklaw ng aplikasyon sa 2026: suporta para sa Android 4.x (API 16-19), kung saan ang Property Animation ay maaaring gumana nang hindi matatag; simpleng epekto ng paglitaw/paglaho na hindi nangangailangan ng pagbabago ng LayoutParams; mga animasyon kung saan ang click mismatch ay hindi kritikal (halimbawa, mga elementong pangbackground). Para sa lahat ng iba pang kaso, inirerekomenda ng Google ang paglipat sa ObjectAnimator o AnimatorSet.
Ayon sa Android Developers, ang Property Animation ay 15-20% mas mahusay sa paggamit ng memory dahil hindi ito gumagawa ng mga intermediate canvas frame. Ang paglipat mula View Animation patungong Property Animation ay nag-aalis din ng problema ng click mismatch: ang View pagkatapos ng animasyon ay tumatanggap ng mga pagpindot sa bagong posisyon.
Mga Madalas Itanong
View Animation ay nagbabago lamang ng rendering ng View — pagkatapos ng animasyon, ang View ay nananatili sa orihinal na posisyon para sa mga touch event. Property Animation ay nagbabago ng tunay na mga property ng object, na nag-a-update ng LayoutParams at wastong nagpo-proseso ng mga click sa bagong posisyon.
Idineklara ng Google na luma ang View Animation simula sa Android 3.0 (API 11). Dahilan — click mismatch at kawalan ng kakayahang mag-animate ng di-makatwirang mga property ng object. Property Animation ay lumulutas sa mga problemang ito at inirerekomenda para sa lahat ng bagong proyekto.
Maaaring gamitin pero hindi inirerekomenda. Ang button pagkatapos ng TranslateAnimation ay ipapakita sa bagong lokasyon, ngunit ang mga click ay gagana sa orihinal na posisyon. Para sa mga button, gamitin ang Property Animation o ang component na may AnimatedVisibility sa Jetpack Compose.
Tawagan ang view.clearAnimation(). Kung ang animasyon ay sinimulan nang may fillAfter=true, ang View ay mananatili sa huling estado. Para sa sapilitang pagbabalik sa panimulang estado, tawagan ang clearAnimation() at invalidate().
Buod
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.
Basahin din