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 را از Android 3.0 (API 11) به عنوان API منسوخ علامت‌گذاری می‌کند. برای پروژه‌های جدید، Property Animation — Animator, AnimatorSet و ObjectAnimator توصیه می‌شود که با ویژگی‌های واقعی اشیاء از طریق متدهای setter کار می‌کنند.

انواع Tween Animation

Tween Animation — انیمیشن “بین” فریم‌های کلیدی: شما حالت شروع و پایان را تعیین می‌کنید و سیستم فریم‌های میانی را محاسبه می‌کند. Android چهار نوع استاندارد ارائه می‌دهد که هر کدام مجموعه پارامترهای خاص خود را دارند.

AlphaAnimation

AlphaAnimation شفافیت View را از fromAlpha به toAlpha تغییر می‌دهد. مقادیر از 0.0 (کاملاً شفاف) تا 1.0 (کاملاً قابل مشاهده). به طور پیش‌فرض، انیمیشن 300 میلی‌ثانیه طول می‌کشد. پارامتر 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
سطح 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 از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید