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). Οι τιμές δίνονται σε pixel, ποσοστά του γονέα ή ποσοστά του ίδιου του 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 vs Property Animation

Η διαφορά μεταξύ View Animation και Property Animation (Animator) — θεμελιώδης διαφορά στην αρχιτεκτονική κινούμενων σχεδίων του Android. Το View Animation λειτουργεί μόνο στην απόδοση, το Property Animation αλλάζει τις πραγματικές ιδιότητες του αντικειμένου μέσω μεθόδων setter, οδηγώντας σε ενημέρωση της διάταξης.

ΚριτήριοView AnimationProperty Animation
Επίπεδο APIAPI 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης