ফ্লিং-ভিত্তিক অ্যানিমেশন একটি ঘর্ষণ বল ব্যবহার করে যা কোনো বস্তুর বেগের সমানুপাতিক। কোনো বস্তুর বৈশিষ্ট্যকে অ্যানিমেট করতে এবং অ্যানিমেশনটি ধীরে ধীরে শেষ করতে এটি ব্যবহার করুন। এর একটি প্রাথমিক ভরবেগ থাকে, যা মূলত অঙ্গভঙ্গির বেগ থেকে আসে এবং ধীরে ধীরে কমে যায়। অ্যানিমেশনটি তখন শেষ হয় যখন এর বেগ এতটাই কমে যায় যে ডিভাইসের স্ক্রিনে কোনো দৃশ্যমান পরিবর্তন দেখা যায় না।

সম্পর্কিত বিষয়গুলো সম্পর্কে জানতে, নিম্নলিখিত নির্দেশিকাগুলো পড়ুন:
AndroidX লাইব্রেরি যোগ করুন
পদার্থবিদ্যা-ভিত্তিক অ্যানিমেশন ব্যবহার করতে হলে, আপনাকে নিম্নলিখিতভাবে আপনার প্রজেক্টে AndroidX লাইব্রেরিটি যুক্ত করতে হবে:
- আপনার অ্যাপ মডিউলের
build.gradleফাইলটি খুলুন। -
dependenciesসেকশনে AndroidX লাইব্রেরিটি যোগ করুন।গ্রুভি
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
কোটলিন
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
একটি ফ্লিং অ্যানিমেশন তৈরি করুন
FlingAnimation ক্লাসটি আপনাকে কোনো অবজেক্টের জন্য ফ্লিং অ্যানিমেশন তৈরি করতে দেয়। একটি ফ্লিং অ্যানিমেশন তৈরি করতে, FlingAnimation ক্লাসের একটি ইনস্ট্যান্স তৈরি করুন এবং একটি অবজেক্ট ও তার যে প্রপার্টিটি আপনি অ্যানিমেট করতে চান, তা প্রদান করুন।
কোটলিন
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
জাভা
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
বেগ নির্ধারণ করুন
প্রারম্ভিক বেগ সেই গতিকে সংজ্ঞায়িত করে, যে গতিতে অ্যানিমেশনের শুরুতে কোনো অ্যানিমেশন প্রপার্টি পরিবর্তিত হয়। ডিফল্ট প্রারম্ভিক বেগ প্রতি সেকেন্ডে শূন্য পিক্সেল নির্ধারণ করা থাকে। তাই, অ্যানিমেশনটি যাতে সাথে সাথে শেষ না হয়ে যায়, তা নিশ্চিত করার জন্য আপনাকে অবশ্যই একটি প্রারম্ভিক বেগ নির্ধারণ করতে হবে।
আপনি প্রারম্ভিক বেগ হিসেবে একটি নির্দিষ্ট মান ব্যবহার করতে পারেন, অথবা কোনো টাচ জেসচারের বেগের উপর ভিত্তি করে এটি নির্ধারণ করতে পারেন। যদি আপনি একটি নির্দিষ্ট মান দেওয়ার সিদ্ধান্ত নেন, তবে আপনার উচিত মানটিকে dp প্রতি সেকেন্ডে সংজ্ঞায়িত করা, এবং তারপর সেটিকে পিক্সেল প্রতি সেকেন্ডে রূপান্তর করা। dp প্রতি সেকেন্ডে মানটি সংজ্ঞায়িত করলে বেগটি ডিভাইসের ঘনত্ব এবং ফর্ম ফ্যাক্টরের উপর নির্ভরশীল থাকে না। প্রারম্ভিক বেগকে পিক্সেল প্রতি সেকেন্ডে রূপান্তর করার বিষয়ে আরও তথ্যের জন্য, Spring Animation- এর 'Converting dp per second to pixels per second' অংশটি দেখুন।
বেগ নির্ধারণ করতে, setStartVelocity() মেথডটি কল করুন এবং বেগটি পিক্সেল প্রতি সেকেন্ডে পাস করুন। মেথডটি সেই ফ্লিং অবজেক্টটি রিটার্ন করে, যার উপর বেগটি নির্ধারণ করা হয়।
দ্রষ্টব্য: টাচ জেসচারের বেগ যথাক্রমে পুনরুদ্ধার এবং গণনা করার জন্য GestureDetector.OnGestureListener এবং VelocityTracker ক্লাস ব্যবহার করুন।
অ্যানিমেশন মানের পরিসীমা নির্ধারণ করুন
যখন আপনি কোনো প্রপার্টির মানকে একটি নির্দিষ্ট পরিসরের মধ্যে সীমাবদ্ধ রাখতে চান, তখন আপনি সর্বনিম্ন এবং সর্বোচ্চ অ্যানিমেশন মান নির্ধারণ করতে পারেন। এই পরিসর নিয়ন্ত্রণটি বিশেষত সেইসব প্রপার্টি অ্যানিমেট করার ক্ষেত্রে উপযোগী, যেগুলোর একটি অন্তর্নিহিত পরিসর রয়েছে, যেমন আলফা (০ থেকে ১)।
দ্রষ্টব্য : যখন কোনো ফ্লিং অ্যানিমেশনের মান সর্বনিম্ন বা সর্বোচ্চ মানে পৌঁছায়, তখন অ্যানিমেশনটি শেষ হয়ে যায়।
সর্বনিম্ন এবং সর্বোচ্চ মান নির্ধারণ করতে, যথাক্রমে setMinValue() এবং setMaxValue() মেথড কল করুন। উভয় মেথডই সেই অ্যানিমেশন অবজেক্টটি রিটার্ন করে, যার জন্য আপনি মানটি নির্ধারণ করেছেন।
সেট ঘর্ষণ
setFriction() মেথডটি আপনাকে অ্যানিমেশনের ঘর্ষণ পরিবর্তন করতে দেয়। এটি নির্ধারণ করে যে একটি অ্যানিমেশনে বেগ কত দ্রুত হ্রাস পাবে।
দ্রষ্টব্য : আপনি যদি অ্যানিমেশনের শুরুতে ঘর্ষণ সেট না করেন, তাহলে অ্যানিমেশনটি ডিফল্ট ঘর্ষণ মান ১ ব্যবহার করবে।
এই মেথডটি এমন একটি অবজেক্ট রিটার্ন করে, যার অ্যানিমেশনে আপনার দেওয়া ফ্রিকশন ভ্যালুটি ব্যবহৃত হয়।
নমুনা কোড
নিচের উদাহরণটি একটি অনুভূমিক নিক্ষেপ প্রদর্শন করে। ভেলোসিটি ট্র্যাকার থেকে প্রাপ্ত বেগটি হলো velocityX এবং স্ক্রল বাউন্ডস ০ ও maxScroll-এ সেট করা আছে। ফ্রিকশন ১.১-এ সেট করা আছে।
কোটলিন
FlingAnimation(view, DynamicAnimation.SCROLL_X).apply { setStartVelocity(-velocityX) setMinValue(0f) setMaxValue(maxScroll) friction = 1.1f start() }
জাভা
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X); fling.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
ন্যূনতম দৃশ্যমান পরিবর্তন সেট করুন
যখন আপনি পিক্সেলে সংজ্ঞায়িত নয় এমন কোনো কাস্টম প্রপার্টি অ্যানিমেট করেন, তখন ব্যবহারকারীদের কাছে দৃশ্যমান অ্যানিমেশন মানের ন্যূনতম পরিবর্তন নির্ধারণ করা উচিত। এটি অ্যানিমেশনটি শেষ করার জন্য একটি যুক্তিসঙ্গত সীমা নির্ধারণ করে।
DynamicAnimation.ViewProperty অ্যানিমেট করার সময় এই মেথডটি কল করার প্রয়োজন নেই, কারণ ন্যূনতম দৃশ্যমান পরিবর্তনটি প্রপার্টি থেকেই নির্ধারিত হয়। উদাহরণস্বরূপ:
-
TRANSLATION_X,TRANSLATION_Y,TRANSLATION_Z,SCROLL_X, এবংSCROLL_Yমতো ভিউ প্রোপার্টিগুলোর জন্য ডিফল্ট সর্বনিম্ন দৃশ্যমান পরিবর্তনের মান হলো ১ পিক্সেল। - যেসব অ্যানিমেশনে ঘূর্ণন ব্যবহার করা হয়, যেমন
ROTATION,ROTATION_X, এবংROTATION_Y, সেগুলোর ক্ষেত্রে সর্বনিম্ন দৃশ্যমান পরিবর্তন হলোMIN_VISIBLE_CHANGE_ROTATION_DEGREES, বা ১/১০ পিক্সেল। - যেসব অ্যানিমেশনে অপাসিটি ব্যবহার করা হয়, সেগুলোর ক্ষেত্রে সর্বনিম্ন দৃশ্যমান পরিবর্তন হলো
MIN_VISIBLE_CHANGE_ALPHA, বা ১/২৫৬।
একটি অ্যানিমেশনের জন্য ন্যূনতম দৃশ্যমান পরিবর্তন সেট করতে, setMinimumVisibleChange() মেথডটি কল করুন এবং ন্যূনতম দৃশ্যমান ধ্রুবকগুলোর মধ্যে একটি অথবা একটি কাস্টম প্রপার্টির জন্য গণনা করার মতো একটি মান পাস করুন। এই মানটি গণনা করার বিষয়ে আরও তথ্যের জন্য, "ন্যূনতম দৃশ্যমান পরিবর্তনের মান গণনা করা" বিভাগটি দেখুন।
কোটলিন
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
জাভা
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
দ্রষ্টব্য : শুধুমাত্র তখনই আপনাকে একটি মান পাস করতে হবে, যখন আপনি এমন কোনো কাস্টম প্রপার্টি অ্যানিমেট করবেন যা পিক্সেলে সংজ্ঞায়িত নয়।
ন্যূনতম দৃশ্যমান পরিবর্তন মান গণনা করা
একটি কাস্টম প্রপার্টির জন্য ন্যূনতম দৃশ্যমান পরিবর্তনের মান গণনা করতে, নিম্নলিখিত সূত্রটি ব্যবহার করুন:
সর্বনিম্ন দৃশ্যমান পরিবর্তন = কাস্টম প্রপার্টি মানের পরিসর / অ্যানিমেশনের পরিসর (পিক্সেল)
উদাহরণস্বরূপ, যে প্রপার্টিটি আপনি অ্যানিমেট করতে চান, তার মান ০ থেকে ১০০-তে পরিবর্তিত হয়। এটি ২০০ পিক্সেলের একটি পরিবর্তনের সমান। সূত্র অনুযায়ী, সর্বনিম্ন দৃশ্যমান পরিবর্তনের মান হলো ১০০ / ২০০, যা ০.৫ পিক্সেলের সমান।
