View Animation — یک سیستم انیمیشن منسوخ Android API 1+ است که با اشیاء View از طریق Tween Animation (Alpha, Translate, Scale, Rotate) کار میکند. Google Property Animation (Animator) را برای همه پروژههای جدید توصیه میکند. این مقاله اصول، انواع، پیکربندی XML و دلایل کنار گذاشتن را توضیح میدهد.
نکات اصلی
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 — انیمیشن “بین” فریمهای کلیدی: شما حالت شروع و پایان را تعیین میکنید و سیستم فریمهای میانی را محاسبه میکند. Android چهار نوع استاندارد ارائه میدهد که هر کدام مجموعه پارامترهای خاص خود را دارند.
AlphaAnimation شفافیت View را از fromAlpha به toAlpha تغییر میدهد. مقادیر از 0.0 (کاملاً شفاف) تا 1.0 (کاملاً قابل مشاهده). به طور پیشفرض، انیمیشن 300 میلیثانیه طول میکشد. پارامتر fillAfter=true View را در حالت شفافیت نهایی نگه میدارد.
<!-- 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 View را از موقعیت شروع (fromXDelta, fromYDelta) به موقعیت پایان (toXDelta, toYDelta) منتقل میکند. مقادیر بر حسب پیکسل، درصد والد یا درصد خود View تعیین میشوند. به عنوان مثال، 100% به معنای 100% عرض View است.
ScaleAnimation View را نسبت به نقطه pivotX/pivotY مقیاس میکند. fromXScale=1.0, toXScale=2.0 عرض را دو برابر میکند. پارامتر pivotType تعیین میکند که pivot نسبت به چه چیزی محاسبه شود: self، parent یا absolute. انیمیشن مقیاس اندازههای واقعی View را تغییر نمیدهد — فقط رندرینگ را تغییر میدهد.
RotateAnimation View را حول نقطه pivot با زاویه fromDegrees تا toDegrees میچرخاند. زاویه بر حسب درجه اندازهگیری میشود: 0 — موقعیت اولیه، 360 — چرخش کامل. برای چرخش بینهایت از repeatCount=INFINITE استفاده کنید.
تفاوت بین View Animation و Property Animation (Animator) — تفاوت اساسی در معماری انیمیشن Android است. View Animation فقط روی رندرینگ عمل میکند، Property Animation ویژگیهای واقعی شیء را از طریق متدهای setter تغییر میدهد که منجر به بهروزرسانی چیدمان میشود.
| معیار | View Animation | Property Animation |
|---|---|---|
| سطح API | API 1+ (منسوخ) | API 11+ (توصیه شده) |
| چه چیزی را انیمیشن میکند | رندرینگ View (canvas) | ویژگیهای شیء (setter) |
| کلیک پس از انیمیشن | در موقعیت اصلی | در موقعیت جدید |
| انواع انیمیشن | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | تغییر نمیدهد | از طریق setLayoutParams تغییر میدهد |
| عملکرد | بالا (فقط canvas) | متوسط (بستگی به setter دارد) |
View Animation معمولاً در فایلهای XML res/anim/ با عنصر ریشه
<!-- 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 پس از پایان انیمیشن در حالت نهایی باقی میماند یا خیر.
اگرچه انیمیشنها معمولاً در XML تعریف میشوند، اما میتوان آنها را از طریق 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 در سال 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 فقط رندرینگ View را تغییر میدهد — پس از انیمیشن، View برای رویدادهای لمسی در موقعیت اصلی باقی میماند. Property Animation ویژگیهای واقعی شیء را تغییر میدهد که LayoutParams را بهروزرسانی میکند و کلیکها را در موقعیت جدید به درستی پردازش میکند.
Google View Animation را از Android 3.0 (API 11) منسوخ اعلام کرد. دلیل — عدم تطابق کلیک (click mismatch) و عدم توانایی در انیمیشن ویژگیهای دلخواه اشیاء. Property Animation این مشکلات را حل میکند و برای همه پروژههای جدید توصیه میشود.
میتوان استفاده کرد اما توصیه نمیشود. دکمه پس از TranslateAnimation در مکان جدید نمایش داده میشود، اما کلیکها در موقعیت اصلی کار میکنند. برای دکمهها از Property Animation یا کامپوننت AnimatedVisibility در Jetpack Compose استفاده کنید.
view.clearAnimation() را فراخوانی کنید. اگر انیمیشن با fillAfter=true اجرا شده باشد، View در حالت نهایی باقی میماند. برای بازگشت اجباری به حالت اولیه، clearAnimation() و invalidate() را فراخوانی کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید