View Animation Android API 1+ کا ایک پرانا اینیمیشن نظام ہے جو Tween Animation (Alpha، Translate، Scale، Rotate) کے ذریعے View آبجیکٹس کے ساتھ کام کرتا ہے۔ Google تمام نئے پروجیکٹس کے لیے Property Animation (Animator) کی سفارش کرتا ہے۔ یہ مضمون اصولوں، اقسام، XML مارک اپ اور ترک کرنے کی وجوہات کی وضاحت کرتا ہے۔
اہم نکات
View Animation Android کا ایک اینیمیشن ذیلی نظام ہے جو View سطح (API 1+) پر کام کرتا ہے۔ یہ چار اقسام کے Tween Animation استعمال کرتا ہے: AlphaAnimation (شفافیت)، TranslateAnimation (نقل مکانی)، ScaleAnimation (پیمانہ) اور RotateAnimation (گھماؤ)۔ ہر اینیمیشن res/anim/ فولڈر میں XML فائل میں بیان کی جاتی ہے یا Kotlin کوڈ میں پروگرامی طور پر بنائی جاتی ہے۔
View Animation میکانزم View کی حقیقی خصوصیات نہیں بدلتا — View کو نئی پوزیشن، پیمانے یا شفافیت میں دوبارہ کھینچتا ہے، لیکن onTouchEvent() کال بیک اصل مقام کے کوآرڈینیٹ وصول کرتا ہے۔ یہ ایک اہم حد ہے جسے کلک مماثلت نہ ہونے (click mismatch) کے نام سے جانا جاتا ہے۔
Android ڈویلپر دستاویزات (2026) کے مطابق، Google نے Android 3.0 (API 11) سے View Animation کو فرسودہ API قرار دیا ہے۔ نئے پروجیکٹس کے لیے Property Animation تجویز کی جاتی ہے — Animator، AnimatorSet اور ObjectAnimator، جو setter طریقوں کے ذریعے حقیقی آبجیکٹ خصوصیات کے ساتھ کام کرتے ہیں۔
Tween Animation کلیدی فریموں کے “درمیان” والی اینیمیشن ہے: آپ ابتدائی اور آخری حالت متعین کرتے ہیں، اور نظام درمیانی فریموں کا حساب لگاتا ہے۔ Android چار معیاری اقسام فراہم کرتا ہے، ہر ایک اپنے پیرامیٹرز کے سیٹ کے ساتھ۔
AlphaAnimation View کی شفافیت کو fromAlpha سے toAlpha تک تبدیل کرتا ہے۔ قدریں 0.0 (مکمل طور پر شفاف) سے 1.0 (مکمل طور پر نظر آنے والا) تک ہوتی ہیں۔ ڈیفالٹ طور پر، اینیمیشن 300 ms تک رہتی ہے۔ پیرامیٹر 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% کا مطلب View کی چوڑائی کا 100% ہے۔
ScaleAnimation View کو pivotX/pivotY نقطہ کے نسبت سے پیمانہ کرتا ہے۔ fromXScale=1.0، toXScale=2.0 چوڑائی دوگنا کر دیتا ہے۔ پیرامیٹر pivotType متعین کرتا ہے کہ محور کس کے نسبت سے شمار کیا جاتا ہے: self، parent یا absolute۔ پیمانہ اینیمیشن View کے حقیقی طول و عرض نہیں بدلتا — صرف رینڈرنگ بدلتا ہے۔
RotateAnimation View کو ایک محور نقطہ کے گرد 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 عام طور پر res/anim/ میں 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 مکمل ہونے کے بعد اینیمیشن کی آخری حالت میں رہتا ہے۔
اگرچہ اینیمیشنز عام طور پر XML میں متعین کی جاتی ہیں، انہیں Kotlin استعمال کرکے پروگرامی طور پر بھی بنایا جا سکتا ہے۔ پروگرامی طریقہ متحرک پیرامیٹرز کے لیے مفید ہے: شفافیت کی قدر ایپلیکیشن کی حالت پر منحصر ہوتی ہے بجائے اس کے کہ جامد طور پر متعین کی گئی ہو۔
// Kotlin میں پروگرامی طور پر AlphaAnimation بنانا
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 ڈویلپرز کے مطابق، Property Animation میموری میں 15-20% زیادہ موثر ہے کیونکہ یہ درمیانی canvas فریم نہیں بناتا۔ View Animation سے Property Animation میں منتقلی سے کلک مماثلت نہ ہونے کا مسئلہ بھی ختم ہو جاتا ہے: اینیمیشن کے بعد View اپنی نئی پوزیشن پر لمس وصول کرتا ہے۔
اکثر پوچھے گئے سوالات
View Animation صرف View کی رینڈرنگ بدلتا ہے — اینیمیشن کے بعد، View لمس واقعات کے لیے اپنی اصل پوزیشن پر رہتا ہے۔ Property Animation آبجیکٹ کی حقیقی خصوصیات بدلتا ہے، جو LayoutParams کو اپ ڈیٹ کرتا ہے اور نئی پوزیشن پر کلکس کو درست طریقے سے ہینڈل کرتا ہے۔
Google نے Android 3.0 (API 11) سے View Animation کو فرسودہ قرار دیا۔ وجہ کلک مماثلت نہ ہونا (click mismatch) اور صوابدیدی آبجیکٹ خصوصیات کو اینیمیشن دینے میں ناکامی ہے۔ Property Animation ان مسائل کو حل کرتا ہے اور تمام نئے پروجیکٹس کے لیے تجویز کیا جاتا ہے۔
استعمال کیا جا سکتا ہے لیکن تجویز نہیں کیا جاتا۔ TranslateAnimation کے بعد ایک بٹن نئی جگہ پر ظاہر ہوگا، لیکن کلکس اصل پوزیشن پر رجسٹر ہوں گے۔ بٹنوں کے لیے، Property Animation یا Jetpack Compose میں AnimatedVisibility کے ساتھ composable استعمال کریں۔
view.clearAnimation() کو کال کریں۔ اگر اینیمیشن fillAfter=true کے ساتھ شروع کی گئی تھی، تو View اپنی آخری حالت میں رہے گا۔ اصل حالت میں واپس آنے پر مجبور کرنے کے لیے، clearAnimation() اور invalidate() کو کال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں