ফ্লিং অ্যানিমেশন ব্যবহার করে ভিউ সরান

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ কীভাবে অ্যানিমেশন ব্যবহার করতে হয় তা জানুন।

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

ছবি ১. ফ্লিং অ্যানিমেশন

সম্পর্কিত বিষয় সম্পর্কে জানতে, নিম্নলিখিত নির্দেশিকা পড়ুন:

AndroidX লাইব্রেরি যোগ করা

ফিজিক্স-ভিত্তিক অ্যানিমেশন ব্যবহার করতে, আপনাকে অবশ্যই আপনার প্রোজেক্টে AndroidX লাইব্রেরি যোগ করতে হবে নিম্নলিখিত উপায়ে:

  1. আপনার অ্যাপ মডিউলের জন্য build.gradle ফাইল খুলুন।
  2. dependencies বিভাগে AndroidX লাইব্রেরি যোগ করুন।

    গ্ৰুভি

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    Kotlin

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

ফ্লিং অ্যানিমেশন তৈরি করা

FlingAnimation ক্লাস আপনাকে কোনও অবজেক্টের জন্য ফ্লিং অ্যানিমেশন তৈরি করতে দেয়। ফ্লিং অ্যানিমেশন তৈরি করতে, FlingAnimation ক্লাসের একটি ইনস্ট্যান্স তৈরি করুন এবং আপনি যে অবজেক্ট ও অবজেক্টের প্রপার্টি অ্যানিমেট করতে চান সেটি প্রদান করুন।

Kotlin

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

জাভা

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);

গতিবেগ সেট করুন

শুরুর ভেলোসিটি সেই স্পিডকে সংজ্ঞায়িত করে যে স্পিডে অ্যানিমেশনের শুরুতে অ্যানিমেশন প্রপার্টি পরিবর্তিত হয়। ডিফল্ট শুরুর বেগ প্রতি সেকেন্ডে শূন্য পিক্সেল হিসেবে সেট করা আছে। তাই, অ্যানিমেশন যাতে সাথে সাথেই শেষ না হয়ে যায় তা নিশ্চিত করতে আপনাকে অবশ্যই একটি প্রারম্ভিক বেগ নির্ধারণ করতে হবে।

আপনি প্রারম্ভিক গতিবেগ হিসেবে একটি নির্দিষ্ট মান ব্যবহার করতে পারেন, অথবা আপনি এটিকে একটি টাচ জেসচারের গতিবেগের উপর ভিত্তি করে সেট করতে পারেন। আপনি যদি একটি নির্দিষ্ট মান প্রদান করতে চান, তাহলে আপনাকে প্রতি সেকেন্ডে ডিপি-তে মানটি নির্ধারণ করতে হবে, তারপর এটিকে প্রতি সেকেন্ডে পিক্সেলে কনভার্ট করতে হবে। সেকেন্ড পিছু dp-তে মান নির্ধারণ করলে, ডিভাইসের ঘনত্ব ও ফর্ম ফ্যাক্টর থেকে গতিবেগ স্বাধীন হয়। শুরুর বেগ প্রতি সেকেন্ডে পিক্সেলে কনভার্ট করার বিষয়ে আরও তথ্যের জন্য, স্প্রিং অ্যানিমেশন-এর প্রতি সেকেন্ডে ডিপি থেকে প্রতি সেকেন্ডে পিক্সেলে কনভার্ট করা বিভাগটি দেখুন।

গতিবেগ সেট করতে, setStartVelocity() মেথড কল করুন এবং পিক্সেল প্রতি সেকেন্ডে গতিবেগ পাস করুন। এই পদ্ধতিটি ফ্লিং অবজেক্ট ফিরিয়ে দেয় যার উপর গতিবেগ সেট করা হয়।

মনে রাখবেন: যথাক্রমে টাচ জেসচারের গতি পুনরুদ্ধার ও গণনা করতে GestureDetector.OnGestureListener এবং VelocityTracker ক্লাস ব্যবহার করুন।

অ্যানিমেশন ভ্যালুর রেঞ্জ সেট করুন

আপনি যখন প্রপার্টি ভ্যালু নির্দিষ্ট রেঞ্জে সীমাবদ্ধ করতে চান, তখন অ্যানিমেশনের সর্বনিম্ন ও সর্বোচ্চ ভ্যালু সেট করতে পারবেন। এই রেঞ্জ কন্ট্রোল বিশেষ করে তখন উপযোগী হয় যখন আপনি এমন প্রপার্টি অ্যানিমেট করেন যার একটি অন্তর্নিহিত রেঞ্জ আছে, যেমন আলফা (০ থেকে ১ পর্যন্ত)।

মনে রাখবেন: কোনও ফ্লিং অ্যানিমেশনের মান সর্বনিম্ন বা সর্বোচ্চ মানে পৌঁছে গেলে, অ্যানিমেশন শেষ হয়ে যায়।

সর্বনিম্ন ও সর্বোচ্চ ভ্যালু সেট করতে, যথাক্রমে setMinValue() ও setMaxValue() মেথড কল করুন। দুটি পদ্ধতিই অ্যানিমেশন অবজেক্ট রিটার্ন করে যার জন্য আপনি ভ্যালু সেট করেছেন।

ঘর্ষণ সেট করুন

setFriction() পদ্ধতির মাধ্যমে আপনি অ্যানিমেশনের ফ্রিকশন পরিবর্তন করতে পারবেন। অ্যানিমেশনে কত দ্রুত বেগ কমে যায় তা এটি নির্ধারণ করে।

মনে রাখবেন: অ্যানিমেশনের শুরুতে আপনি ঘর্ষণ সেট না করলে, অ্যানিমেশন ১-এর ডিফল্ট ঘর্ষণ মান ব্যবহার করে।

এই পদ্ধতিটি সেই অবজেক্টটি রিটার্ন করে যার অ্যানিমেশন আপনার প্রদান করা ঘর্ষণ মান ব্যবহার করে।

নমুনা কোড

নিচের উদাহরণে অনুভূমিক ফ্লিং দেখানো হয়েছে। ভেলোসিটি ট্র্যাকার থেকে ক্যাপচার করা ভেলোসিটি হল velocityX এবং স্ক্রল বাউন্ড ০ ও maxScroll-এ সেট করা আছে। ঘর্ষণ ১.১-এ সেট করা আছে।

Kotlin

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() মেথড কল করুন এবং ন্যূনতম দৃশ্যমান কনস্ট্যান্টের মধ্যে কোনও একটি অথবা কাস্টম প্রপার্টির জন্য আপনাকে যে ভ্যালু গণনা করতে হবে, সেটি পাস করুন। এই ভ্যালু গণনা করার বিষয়ে আরও তথ্যের জন্য, দৃশ্যমান পরিবর্তনের সর্বনিম্ন ভ্যালু গণনা করা বিভাগটি দেখুন।

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

জাভা

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

মনে রাখবেন: আপনি যখন পিক্সেলে সংজ্ঞায়িত নয় এমন একটি কাস্টম প্রপার্টি অ্যানিমেট করেন তখনই আপনাকে একটি মান পাস করতে হবে।

দৃশ্যমান পরিবর্তনের ন্যূনতম ভ্যালু গণনা করা হচ্ছে

কাস্টম প্রপার্টির জন্য ন্যূনতম দৃশ্যমান পরিবর্তন মান গণনা করতে, নিম্নলিখিত ফর্মুলা ব্যবহার করুন:

ন্যূনতম দৃশ্যমান পরিবর্তন = কাস্টম প্রপার্টি ভ্যালুর রেঞ্জ / পিক্সেলে অ্যানিমেশনের রেঞ্জ

যেমন, আপনি যে প্রপার্টি অ্যানিমেট করতে চান সেটি ০ থেকে ১০০ পর্যন্ত প্রোগ্রেস করে। এটি ২০০-পিক্সেল পরিবর্তনের সাথে সম্পর্কিত। ফর্মুলা অনুযায়ী, ন্যূনতম দৃশ্যমান পরিবর্তন ভ্যালু হল ১০০ / ২০০ যা ০.৫ পিক্সেলের সমান।