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

রচনা পদ্ধতিটি চেষ্টা করে দেখুন
জেটপ্যাক কম্পোজ হল অ্যান্ড্রয়েডের জন্য প্রস্তাবিত UI টুলকিট। কম্পোজে অ্যানিমেশন কীভাবে ব্যবহার করবেন তা শিখুন।

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

চিত্র ১. ফ্লিং অ্যানিমেশন

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

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

পদার্থবিদ্যা-ভিত্তিক অ্যানিমেশন ব্যবহার করতে, আপনাকে অবশ্যই আপনার প্রকল্পে AndroidX লাইব্রেরিটি নিম্নরূপ যুক্ত করতে হবে:

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

    খাঁজকাটা

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

    কোটলিন

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

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

FlingAnimation ক্লাস আপনাকে একটি বস্তুর জন্য একটি fling অ্যানিমেশন তৈরি করতে দেয়। একটি fling অ্যানিমেশন তৈরি করতে, FlingAnimation ক্লাসের একটি উদাহরণ তৈরি করুন এবং একটি বস্তু এবং বস্তুর সম্পত্তি প্রদান করুন যা আপনি অ্যানিমেট করতে চান।

কোটলিন

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

জাভা

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

বেগ সেট করুন

অ্যানিমেশনের শুরুতে অ্যানিমেশনের বৈশিষ্ট্যের পরিবর্তনের গতি প্রারম্ভিক বেগ দ্বারা নির্ধারিত হয়। ডিফল্ট প্রারম্ভিক বেগ প্রতি সেকেন্ডে শূন্য পিক্সেল নির্ধারণ করা হয়। অতএব, অ্যানিমেশনটি অবিলম্বে শেষ না হওয়ার জন্য আপনাকে অবশ্যই একটি প্রারম্ভিক বেগ নির্ধারণ করতে হবে।

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

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

দ্রষ্টব্য: স্পর্শ অঙ্গভঙ্গির বেগ পুনরুদ্ধার এবং গণনা করতে যথাক্রমে GestureDetector.OnGestureListener এবং VelocityTracker ক্লাস ব্যবহার করুন।

একটি অ্যানিমেশন মানের পরিসর সেট করুন

যখন আপনি সম্পত্তির মান একটি নির্দিষ্ট পরিসরে সীমাবদ্ধ রাখতে চান তখন আপনি সর্বনিম্ন এবং সর্বোচ্চ অ্যানিমেশন মান সেট করতে পারেন। এই পরিসর নিয়ন্ত্রণ বিশেষভাবে কার্যকর যখন আপনি এমন বৈশিষ্ট্যগুলিকে অ্যানিমেট করেন যার একটি অন্তর্নিহিত পরিসর থাকে, যেমন আলফা (0 থেকে 1 পর্যন্ত)।

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

সর্বনিম্ন এবং সর্বোচ্চ মান নির্ধারণ করতে, যথাক্রমে setMinValue() এবং setMaxValue() পদ্ধতিগুলি কল করুন। উভয় পদ্ধতিই সেই অ্যানিমেশন বস্তুটি ফেরত দেয় যার জন্য আপনি মান নির্ধারণ করেছেন।

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

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

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

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

নমুনা কোড

নিচের উদাহরণটি একটি অনুভূমিক ফ্লিং চিত্রিত করে। বেগ ট্র্যাকার থেকে ক্যাপচার করা বেগ হল velocityX এবং স্ক্রোল সীমা 0 এবং maxScroll এ সেট করা আছে। ঘর্ষণ 1.1 এ সেট করা আছে।

কোটলিন

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 , অথবা 1/10 পিক্সেল।
  • অস্বচ্ছতা ব্যবহার করে এমন অ্যানিমেশনের জন্য, সর্বনিম্ন দৃশ্যমান পরিবর্তন হল MIN_VISIBLE_CHANGE_ALPHA , অথবা 1/256।

একটি অ্যানিমেশনের জন্য সর্বনিম্ন দৃশ্যমান পরিবর্তন সেট করতে, setMinimumVisibleChange() পদ্ধতিটি কল করুন এবং সর্বনিম্ন দৃশ্যমান ধ্রুবকগুলির মধ্যে একটি অথবা একটি কাস্টম সম্পত্তির জন্য গণনা করার জন্য প্রয়োজনীয় একটি মান পাস করুন। এই মান গণনা করার বিষয়ে আরও তথ্যের জন্য, সর্বনিম্ন দৃশ্যমান পরিবর্তন মান গণনা বিভাগটি দেখুন।

কোটলিন

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

জাভা

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

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

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

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

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

উদাহরণস্বরূপ, আপনি যে বৈশিষ্ট্যটি অ্যানিমেট করতে চান তা 0 থেকে 100 পর্যন্ত অগ্রসর হয়। এটি 200-পিক্সেল পরিবর্তনের সাথে সম্পর্কিত। সূত্র অনুসারে, সর্বনিম্ন দৃশ্যমান পরিবর্তন মান 100 / 200 0.5 পিক্সেলের সমান।