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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন