View Animation — ett föråldrat animationssystem för Android API 1+ som arbetar med View-objekt via Tween Animation (Alpha, Translate, Scale, Rotate). Google rekommenderar Property Animation (Animator) för alla nya projekt. Artikeln förklarar principer, typer, XML-konfiguration och orsaker till avskaffande.
Huvudpunkter
View Animation — Android-animationsundersystemet som arbetar på View-nivå (API 1+). Det använder fyra typer av Tween Animation: AlphaAnimation (genomskinlighet), TranslateAnimation (förflyttning), ScaleAnimation (skala) och RotateAnimation (rotation). Varje animation beskrivs i en XML-fil i mappen res/anim/ eller skapas programmatiskt i Kotlin-kod.
View Animation-mekanismen ändrar inte View: s verkliga egenskaper — den ritar om View i ny position, skala eller genomskinlighet, men återanropet onTouchEvent() tar emot koordinater för den ursprungliga platsen. Detta är den viktigaste begränsningen, känd som klickfelaktighet (click mismatch).
Enligt Android Developer Documentation (2026) markerar Google View Animation som föråldrat API från och med Android 3.0 (API 11). För nya projekt rekommenderas Property Animation — Animator, AnimatorSet och ObjectAnimator, som arbetar med verkliga egenskaper hos objekt via setter-metoder.
Tween Animation — animation “mellan” nyckelbildrutor: du anger start- och sluttillstånd och systemet beräknar mellanliggande bildrutor. Android erbjuder fyra standardtyper, var och en med sin egen uppsättning parametrar.
AlphaAnimation ändrar View: s genomskinlighet från fromAlpha till toAlpha. Värden från 0.0 (helt genomskinligt) till 1.0 (helt synligt). Som standard varar animationen 300 ms. Parametern fillAfter=true lämnar View i sluttillståndet för genomskinlighet.
<!-- 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 flyttar View från startpositionen (fromXDelta, fromYDelta) till slutpositionen (toXDelta, toYDelta). Värden anges i pixlar, procentandelar av föräldern eller procentandelar av själva View. Till exempel betyder 100% 100% av View: s bredd.
ScaleAnimation skalar View i förhållande till punkten pivotX/pivotY. fromXScale=1.0, toXScale=2.0 fördubblar bredden. Parametern pivotType bestämmer i förhållande till vad pivot beräknas: self, parent eller absolute. Skalningsanimation ändrar inte View: s verkliga dimensioner — endast rendering.
RotateAnimation roterar View runt punkten pivot med en vinkel från fromDegrees till toDegrees. Vinkeln mäts i grader: 0 — startposition, 360 — full rotation. För oändlig rotation, använd repeatCount=INFINITE.
Skillnaden mellan View Animation och Property Animation (Animator) — en fundamental skillnad i Android-animationsarkitekturen. View Animation arbetar endast på rendering, Property Animation ändrar objektets verkliga egenskaper via setter-metoder, vilket leder till uppdatering av layouten.
| Kriterium | View Animation | Property Animation |
|---|---|---|
| API-nivå | API 1+ (föråldrat) | API 11+ (rekommenderat) |
| Vad animerar | View-rendering (canvas) | Objektsegenskape (setter) |
| Klick efter animation | På ursprungspositionen | På ny position |
| Animationstyper | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Ändrar inte | Ändrar via setLayoutParams |
| Prestanda | Hög (endast canvas) | Medel (beroende på setter) |
View Animation definieras vanligtvis i XML-filer i res/anim/ med rotelementet
<!-- 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-filen laddas via AnimationUtils.loadAnimation(). Interpolator bestämmer lagen för parameterändring över tid: accelerate, decelerate, bounce, overshoot. Anpassad Interpolator skapas via XML-resursen @anim/interpolator_name.
Alla Tween-animationer stöder attribut: duration (ms), startOffset (fördröjning före start), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Attributet fillAfter bestämmer om View förblir i animationens sluttillstånd efter slutförande.
Även om animationer vanligtvis definieras i XML kan de också skapas programmatiskt via Kotlin. Det programmatiska tillvägagångssättet är användbart för dynamiska parametrar: genomskinlighetsvärdet beror på appens tillstånd, inte statiskt bestämt.
// Programmatisk skapelse av AlphaAnimation i 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)
}
// Ladda animation från XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — kombination av animationer
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)Metoden startAnimation() lägger till animationen i View: s renderingskö. För annullering används clearAnimation(). Viktigt: fillAfter=true ändrar inte LayoutParams — när startAnimation anropas igen börjar animationen från View: s ursprungstillstånd, inte från det senast renderade tillståndet.
View Animation har ett snävt tillämpningsområde 2026: stöd för Android 4.x (API 16-19), där Property Animation kan fungera instabilt; enkla visas/försvinner-effekter som inte kräver ändring av LayoutParams; animationer där klickfelaktighet inte är kritisk (till exempel bakgrundselement). För alla andra fall rekommenderar Google övergång till ObjectAnimator eller AnimatorSet.
Enligt Android Developers är Property Animation 15-20% effektivare i minnesanvändning eftersom den inte skapar mellanliggande canvas-bildrutor. Övergång från View Animation till Property Animation eliminerar också problemet med klickfelaktighet: View efter animation tar emot beröringar på den nya positionen.
Vanliga frågor
View Animation ändrar endast View: s rendering — efter animation förblir View på ursprungspositionen för beröringshändelser. Property Animation ändrar objektets verkliga egenskaper, vilket uppdaterar LayoutParams och korrekt bearbetar klick på den nya positionen.
Google förklarade View Animation föråldrat från Android 3.0 (API 11). Anledning — klickfelaktighet (click mismatch) och oförmåga att animera godtyckliga egenskaper hos objekt. Property Animation löser dessa problem och rekommenderas för alla nya projekt.
Det kan användas men rekommenderas inte. Knappen efter TranslateAnimation visas på den nya platsen, men klick fungerar på ursprungspositionen. För knappar, använd Property Animation eller komponenten med AnimatedVisibility i Jetpack Compose.
Anropa view.clearAnimation(). Om animationen startades med fillAfter=true kommer View att förbli i sluttillståndet. För tvångsåtergång till ursprungstillståndet, anropa clearAnimation() och invalidate().
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också