একটি কাস্টম ট্রানজিশন অ্যানিমেশন তৈরি করুন

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

একটি কাস্টম ট্রানজিশন, যেমন একটি অন্তর্নির্মিত ট্রানজিশন প্রকার, অ্যানিমেশনগুলি প্রারম্ভিক এবং শেষ উভয় দৃশ্যের শিশুর দৃষ্টিভঙ্গিতে প্রয়োগ করে৷ যাইহোক, অন্তর্নির্মিত ট্রানজিশন প্রকারের বিপরীতে, আপনাকে কোড প্রদান করতে হবে যা সম্পত্তির মান ক্যাপচার করে এবং অ্যানিমেশন তৈরি করে। আপনি আপনার অ্যানিমেশনের জন্য লক্ষ্য দর্শনের একটি উপসেট সংজ্ঞায়িত করতে চাইতে পারেন।

এই পৃষ্ঠাটি আপনাকে শেখায় কিভাবে সম্পত্তির মান ক্যাপচার করতে হয় এবং কাস্টম ট্রানজিশন তৈরি করতে অ্যানিমেশন তৈরি করতে হয়।

ট্রানজিশন ক্লাস প্রসারিত করুন

একটি কাস্টম ট্রানজিশন তৈরি করতে, আপনার প্রোজেক্টে একটি ক্লাস যুক্ত করুন যা Transition ক্লাসকে প্রসারিত করে এবং নিম্নলিখিত স্নিপেটে দেখানো ফাংশনগুলিকে ওভাররাইড করে:

কোটলিন

class CustomTransition : Transition() {

    override fun captureStartValues(transitionValues: TransitionValues) {}

    override fun captureEndValues(transitionValues: TransitionValues) {}

    override fun createAnimator(
        sceneRoot: ViewGroup,
        startValues: TransitionValues?,
        endValues: TransitionValues?
    ): Animator? {}

}

জাভা

public class CustomTransition extends Transition {

    @Override
    public void captureStartValues(TransitionValues values) {}

    @Override
    public void captureEndValues(TransitionValues values) {}

    @Override
    public Animator createAnimator(ViewGroup sceneRoot,
                                   TransitionValues startValues,
                                   TransitionValues endValues) {}
}

নিম্নলিখিত বিভাগগুলি ব্যাখ্যা করে কিভাবে এই ফাংশনগুলিকে ওভাররাইড করতে হয়।

দৃশ্য সম্পত্তি মান ক্যাপচার

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

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

প্রারম্ভিক মান ক্যাপচার

ফ্রেমওয়ার্কে প্রারম্ভিক ভিউ মান পাস করতে, captureStartValues(transitionValues) ফাংশন প্রয়োগ করুন। ফ্রেমওয়ার্ক শুরুর দৃশ্যের প্রতিটি দৃশ্যের জন্য এই ফাংশনটিকে কল করে। ফাংশন আর্গুমেন্ট হল একটি TransitionValues ​​অবজেক্ট যা ভিউ এর একটি রেফারেন্স এবং একটি Map ইনস্ট্যান্স ধারণ করে যেখানে আপনি আপনার পছন্দের ভিউ মানগুলি সংরক্ষণ করতে পারেন। আপনার বাস্তবায়নে, এই সম্পত্তির মানগুলি পুনরুদ্ধার করুন এবং সেগুলিকে মানচিত্রে সংরক্ষণ করে কাঠামোতে ফিরিয়ে দিন৷

একটি সম্পত্তি মানের কী অন্যান্য TransitionValues ​​কীগুলির সাথে বিরোধ না করে তা নিশ্চিত করতে, নিম্নলিখিত নামকরণ স্কিমটি ব্যবহার করুন:

package_name:transition_name:property_name

নিম্নলিখিত স্নিপেট captureStartValues() ফাংশনের বাস্তবায়ন দেখায়:

কোটলিন

class CustomTransition : Transition() {

    // Define a key for storing a property value in
    // TransitionValues.values with the syntax
    // package_name:transition_class:property_name to avoid collisions
    private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"

    override fun captureStartValues(transitionValues: TransitionValues) {
        // Call the convenience method captureValues
        captureValues(transitionValues)
    }

    // For the view in transitionValues.view, get the values you
    // want and put them in transitionValues.values
    private fun captureValues(transitionValues: TransitionValues) {
        // Get a reference to the view
        val view = transitionValues.view
        // Store its background property in the values map
        transitionValues.values[PROPNAME_BACKGROUND] = view.background
    }

    ...

}

জাভা

public class CustomTransition extends Transition {

    // Define a key for storing a property value in
    // TransitionValues.values with the syntax
    // package_name:transition_class:property_name to avoid collisions
    private static final String PROPNAME_BACKGROUND =
            "com.example.android.customtransition:CustomTransition:background";

    @Override
    public void captureStartValues(TransitionValues transitionValues) {
        // Call the convenience method captureValues
        captureValues(transitionValues);
    }


    // For the view in transitionValues.view, get the values you
    // want and put them in transitionValues.values
    private void captureValues(TransitionValues transitionValues) {
        // Get a reference to the view
        View view = transitionValues.view;
        // Store its background property in the values map
        transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground());
    }
    ...
}

শেষ মান ক্যাপচার

ফ্রেমওয়ার্ক শেষ দৃশ্যে প্রতিটি লক্ষ্য দৃশ্যের জন্য একবার captureEndValues(TransitionValues) ফাংশনকে কল করে। অন্য সব ক্ষেত্রে, captureEndValues() captureStartValues() এর মতোই কাজ করে।

নিম্নলিখিত কোড স্নিপেট captureEndValues() ফাংশনের বাস্তবায়ন দেখায়:

কোটলিন

override fun captureEndValues(transitionValues: TransitionValues) {
    captureValues(transitionValues)
}

জাভা

@Override
public void captureEndValues(TransitionValues transitionValues) {
    captureValues(transitionValues);
}

এই উদাহরণে, captureStartValues() এবং captureEndValues() উভয় ফাংশনই মান পুনরুদ্ধার এবং সংরক্ষণ করতে captureValues() আহ্বান করে। যে ভিউ প্রপার্টি captureValues() পুনরুদ্ধার করে তা একই, তবে শুরু এবং শেষের দৃশ্যে এর মান আলাদা। ফ্রেমওয়ার্ক একটি দৃশ্যের শুরু এবং শেষ অবস্থার জন্য পৃথক মানচিত্র বজায় রাখে।

একটি কাস্টম অ্যানিমেটর তৈরি করুন

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

ফ্রেমওয়ার্ক কতবার createAnimator() ফাংশনকে কল করবে তা নির্ভর করে শুরু এবং শেষ দৃশ্যের মধ্যে ঘটে যাওয়া পরিবর্তনের উপর।

উদাহরণস্বরূপ, একটি কাস্টম রূপান্তর হিসাবে বাস্তবায়িত একটি ফেইড-আউট বা ফেড-ইন অ্যানিমেশন বিবেচনা করুন৷ যদি শুরুর দৃশ্যের পাঁচটি লক্ষ্য থাকে, যার মধ্যে দুটি শেষ দৃশ্য থেকে সরানো হয় এবং শেষ দৃশ্যে শুরুর দৃশ্য থেকে তিনটি লক্ষ্য এবং একটি নতুন লক্ষ্য থাকে, তাহলে ফ্রেমওয়ার্কটি ছয় বার createAnimator() কল করে। তিনটি কল লক্ষ্যবস্তু দুটি দৃশ্যের মধ্যে থাকা লক্ষ্যগুলির ফেড-আউট এবং ফেড-ইনকে অ্যানিমেট করে। আরও দুটি কল শেষ দৃশ্য থেকে সরানো লক্ষ্যগুলিকে বিবর্ণ করে দেয়। একটি কল শেষ দৃশ্যে নতুন লক্ষ্যের ফেড-ইনকে অ্যানিমেট করে।

প্রারম্ভিক এবং শেষ উভয় দৃশ্যে বিদ্যমান লক্ষ্য দৃশ্যগুলির জন্য, ফ্রেমওয়ার্ক startValues ​​এবং endValues ​​উভয় আর্গুমেন্টের জন্য একটি TransitionValues ​​অবজেক্ট প্রদান করে। লক্ষ্য দৃশ্যের জন্য যেগুলি শুধুমাত্র প্রারম্ভিক বা শেষ দৃশ্যে বিদ্যমান, ফ্রেমওয়ার্ক সংশ্লিষ্ট আর্গুমেন্টের জন্য একটি TransitionValues ​​অবজেক্ট এবং অন্যটির জন্য null প্রদান করে।

আপনি একটি কাস্টম ট্রানজিশন তৈরি করার সময় createAnimator(ViewGroup, TransitionValues, TransitionValues) ফাংশনটি বাস্তবায়ন করতে, একটি Animator অবজেক্ট তৈরি করতে আপনার ক্যাপচার করা ভিউ প্রপার্টি মান ব্যবহার করুন এবং ফ্রেমওয়ার্কে ফিরিয়ে দিন। একটি উদাহরণ বাস্তবায়নের জন্য, কাস্টম ট্রানজিশন নমুনায় ChangeColor ক্লাস দেখুন। সম্পত্তি অ্যানিমেটর সম্পর্কে আরও তথ্যের জন্য, সম্পত্তি অ্যানিমেশন দেখুন।

একটি কাস্টম রূপান্তর প্রয়োগ করুন

কাস্টম ট্রানজিশন বিল্ট-ইন ট্রানজিশনের মতোই কাজ করে। আপনি একটি ট্রানজিশন ম্যানেজার ব্যবহার করে একটি কাস্টম ট্রানজিশন প্রয়োগ করতে পারেন, যেমন একটি ট্রানজিশন প্রয়োগ করুন