ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশন জন্য সমর্থন যোগ করুন

সিস্টেম ব্যাক এপিআই ব্যবহার করার সময়, আপনি অ্যাপ-মধ্যস্থ অ্যানিমেশন গ্রহণ করতে এবং কাস্টম ট্রানজিশন সমর্থন করতে পারেন।

ভিডিও ১: ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশন

অপ্ট ইন করার পর, আপনার অ্যাপটি ব্যাক-টু-হোম, ক্রস-অ্যাক্টিভিটি এবং ক্রস-টাস্কের জন্য অ্যানিমেশন প্রদর্শন করে।

আপনি আপনার ম্যাটেরিয়াল কম্পোনেন্ট নির্ভরতা MDC Android এর v1.10.0 তে আপগ্রেড করতে পারেন যাতে আপনি নিম্নলিখিত ধরণের ম্যাটেরিয়াল কম্পোনেন্ট অ্যানিমেশন পেতে পারেন:

আরও তথ্যের জন্য GitHub-এ ম্যাটেরিয়াল কম্পোনেন্ট ডেভেলপার নির্দেশিকা দেখুন।

ভিডিওটিতে অ্যান্ড্রয়েড সেটিংস অ্যাপ ব্যবহার করে ক্রস-অ্যাক্টিভিটি এবং ব্যাক-টু-হোমের জন্য ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশনের একটি সংক্ষিপ্ত উদাহরণ দেখানো হয়েছে।

  1. অ্যানিমেশনে, ব্যবহারকারী পূর্ববর্তী সেটিংস স্ক্রিনে ফিরে যেতে পিছনে সোয়াইপ করেন—ক্রস-অ্যাক্টিভিটি অ্যানিমেশনের একটি উদাহরণ।
  2. এখন পূর্ববর্তী স্ক্রিনে, ব্যবহারকারী দ্বিতীয়বার পিছনে সোয়াইপ করা শুরু করেন, হোম স্ক্রিনের ওয়ালপেপার সহ একটি প্রিভিউ দেখান - ব্যাক-টু-হোম অ্যানিমেশনের একটি উদাহরণ।
  3. ব্যবহারকারী ডানদিকে সোয়াইপ করতে থাকেন, হোম স্ক্রিনে উইন্ডোটি আইকনে সঙ্কুচিত হয়ে যাওয়ার একটি অ্যানিমেশন দেখান।
  4. ব্যবহারকারী এখন সম্পূর্ণরূপে হোম স্ক্রিনে ফিরে এসেছেন।

ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারের জন্য কীভাবে সমর্থন যোগ করবেন সে সম্পর্কে আরও জানুন।

কাস্টম ইন-অ্যাপ ট্রানজিশন এবং অ্যানিমেশন যোগ করুন

আপনি প্রেডিক্টিভ ব্যাক জেসচারের সাহায্যে কাস্টম ইন-অ্যাপ প্রপার্টি অ্যানিমেশন এবং ট্রানজিশন, কাস্টম ক্রস-অ্যাক্টিভিটি অ্যানিমেশন এবং কাস্টম ক্রস-ফ্র্যাগমেন্ট অ্যানিমেশন তৈরি করতে পারেন।

প্রোগ্রেস এপিআই ব্যবহার করে কাস্টম ট্রানজিশন যোগ করুন

AndroidX Activity 1.8.0-alpha01 বা উচ্চতর সংস্করণের সাহায্যে, আপনি আপনার অ্যাপে ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারের জন্য কাস্টম অ্যানিমেশন তৈরি করতে Predictiv Back Progress API ব্যবহার করতে পারেন। Progress API গুলি ভিউ অ্যানিমেট করতে সহায়ক কিন্তু টুকরোগুলির মধ্যে ট্রানজিশন অ্যানিমেট করার সময় এর সীমাবদ্ধতা রয়েছে। OnBackPressedCallback এর মধ্যে আমরা handleOnBackProgressed , handleOnBackCancelled এবং handleOnBackStarted পদ্ধতিগুলি চালু করেছি যাতে ব্যবহারকারী যখন পিছনে সোয়াইপ করে তখন বস্তু অ্যানিমেট করা যায়। সিস্টেম দ্বারা প্রদত্ত ডিফল্ট অ্যানিমেশন বা Material Component অ্যানিমেশনের চেয়ে বেশি কাস্টমাইজ করার প্রয়োজন হলে এই পদ্ধতিগুলি ব্যবহার করুন।

আমরা আশা করি বেশিরভাগ অ্যাপই ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ AndroidX API ব্যবহার করবে, তবে OnBackAnimationCallback ইন্টারফেসের মধ্যেও একই ধরণের প্ল্যাটফর্ম API রয়েছে যা Android 14 ডেভেলপার প্রিভিউ 1 এবং উচ্চতর সংস্করণে পরীক্ষা করার জন্য উপলব্ধ।

AndroidX ট্রানজিশনের সাথে Progress API গুলি ব্যবহার করুন

প্রেডিক্টিভ ব্যাক ট্রানজিশন তৈরি করতে, প্রেডিক্টিভ ব্যাক ট্রানজিশন তৈরি করতে, প্রগ্রেস এপিআইগুলি অ্যান্ড্রয়েড ১৪ এবং তার পরবর্তী সংস্করণে অ্যান্ড্রয়েডএক্স ট্রানজিশন ১.৫.০-আলফা০১ বা তার উচ্চতর সংস্করণের সাথে ব্যবহার করা যেতে পারে।

  1. ব্যবহারকারী যখন পিছনে সোয়াইপ করে তখন ট্রানজিশন চালানোর জন্য beginDelayedTransition এর পরিবর্তে TransitionManager#controlDelayedTransition ব্যবহার করুন।
  2. handleOnBackStarted এর মধ্যে ট্রানজিশন তৈরি করুন।
  3. handleOnBackProgressed মধ্যে back ইভেন্টের সাথে transition টি খেলুন, currentFraction BackEvent.progress এর সাথে সম্পর্কিত করে, যা ব্যবহারকারী কতদূর পিছনে সোয়াইপ করেছেন তা প্রকাশ করে।
  4. ব্যবহারকারী handleOnBackPressed এ পিছনের অঙ্গভঙ্গি করার পরে রূপান্তরটি সম্পূর্ণ করুন।
  5. অবশেষে, handleOnBackCancelled মধ্যে ট্রানজিশনের অবস্থা রিসেট করুন।

নিম্নলিখিত ভিডিও, কোটলিন কোড এবং XML OnBackPressedCallback ব্যবহার করে বাস্তবায়িত দুটি বাক্সের মধ্যে একটি কাস্টম ট্রানজিশন প্রদর্শন করে:

    class MyFragment : Fragment() {

    val transitionSet = TransitionSet().apply {
        addTransition(Fade(Fade.MODE_OUT))
        addTransition(ChangeBounds())
        addTransition(Fade(Fade.MODE_IN))
    }
    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val callback = object : OnBackPressedCallback(enabled = false) {

            var controller: TransitionSeekController? = null

            @RequiresApi(34)
            override fun handleOnBackStarted(backEvent: BackEvent) {
                // Create the transition
                controller = TransitionManager.controlDelayedTransition(
                    binding.card,
                    transitionSet
                )
                changeTextVisibility(ShowText.SHORT)
            }

            @RequiresApi(34)
            override fun handleOnBackProgressed(backEvent: BackEvent) {
                // Play the transition as the user swipes back
                if (controller?.isReady == true) {
                    controller?.currentFraction = backEvent.progress
                }
            }

            override fun handleOnBackPressed() {
                // Finish playing the transition when the user commits back
                controller?.animateToEnd()
                this.isEnabled = false
            }

            @RequiresApi(34)
            override fun handleOnBackCancelled() {
                // If the user cancels the back gesture, reset the state
                transition(ShowText.LONG)
            }
        }

        binding.shortText.setOnClickListener {
            transition(ShowText.LONG)
            callback.isEnabled = true
        }

        this.requireActivity().onBackPressedDispatcher.addCallback(callback)
    }

    private fun transition(showText: ShowText) {
        TransitionManager.beginDelayedTransition(
            binding.card,
            transitionSet
        )
        changeTextVisibility(showText)
    }

    enum class ShowText { SHORT, LONG }
    private fun changeTextVisibility(showText: ShowText) {
        when (showText) {
            ShowText.SHORT -> {
                binding.shortText.isVisible = true
                binding.longText.isVisible = false
            }
            ShowText.LONG -> {
                binding.shortText.isVisible = false
                binding.longText.isVisible = true
            }
        }
    }
}
  
<?xml version="1.0" encoding="utf-8"?>
...
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/card"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...>

        <TextView
            android:id="@+id/short_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            ... />

        <TextView
            android:id="@+id/long_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"
            .../>

    </androidx.constraintlayout.widget.ConstraintLayout>

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

  • ট্রানজিশনটি প্রেডিক্টিভ ব্যাক সমর্থন করে কিনা তা পরীক্ষা করতে isSeekingSupported ব্যবহার করুন।
  • আপনার কাস্টম ট্রানজিশনের জন্য সত্য ফেরত দিতে isSeekingSupported ওভাররাইড করুন।
  • প্রতি অ্যানিমেশনে একটি করে কন্ট্রোলার তৈরি করুন।
  • AndroidX ট্রানজিশনের সাথে প্রেডিক্টিভ ব্যাক ট্রানজিশন সমর্থিত, কিন্তু ফ্রেমওয়ার্ক ট্রানজিশনের সাথে নয়। ফ্রেমওয়ার্ক ট্রানজিশন থেকে দূরে সরে যান এবং পরিবর্তে Animator এবং অ্যান্ড্রয়েডএক্স ট্রানজিশন ব্যবহার করুন।
  • Android 14 এবং তার পরবর্তী ভার্সন চালিত ডিভাইসগুলিতে ভবিষ্যদ্বাণীমূলক ব্যাক ট্রানজিশন সমর্থিত এবং এগুলি ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ নয়।
  • XML দৃশ্য দিয়ে তৈরি ট্রানজিশনগুলিও সমর্থিত। handleOnBackStarted এ, আপনার TransitionSeekController controlDelayedTransition এর ফলাফলের পরিবর্তে TransitionManager.createSeekController এর ফলাফলে সেট করুন।

Android 14 এবং উচ্চতর ভার্সনে কাস্টম অ্যাক্টিভিটি ট্রানজিশন যোগ করুন

Android 14 এবং তার পরবর্তী ভার্সনে কাস্টম অ্যাক্টিভিটি ট্রানজিশন যাতে প্রেডিক্টিভ ব্যাক সাপোর্ট করে তা নিশ্চিত করতে, আপনি overridePendingTransition এর পরিবর্তে overrideActivityTransition ব্যবহার করতে পারেন। এর অর্থ হল ব্যবহারকারী যখন পিছনে সোয়াইপ করেন তখন ট্রানজিশন অ্যানিমেশনটি বাজতে থাকে।

এটি কীভাবে কাজ করতে পারে তার একটি উদাহরণ দিতে, এমন একটি দৃশ্য কল্পনা করুন যেখানে অ্যাক্টিভিটি B ব্যাক স্ট্যাকের অ্যাক্টিভিটি A এর উপরে থাকবে। আপনি নিম্নলিখিত উপায়ে কাস্টম অ্যাক্টিভিটি অ্যানিমেশনগুলি পরিচালনা করবেন:

  • Activity B এর onCreate পদ্ধতির মধ্যে খোলা বা বন্ধ করার ট্রানজিশন কল করুন।
  • যখন ব্যবহারকারী অ্যাক্টিভিটি B তে নেভিগেট করেন, তখন OVERRIDE_TRANSITION_OPEN ব্যবহার করুন। যখন ব্যবহারকারী অ্যাক্টিভিটি A তে ফিরে যেতে সোয়াইপ করেন, তখন OVERRIDE_TRANSITION_CLOSE ব্যবহার করুন।
  • OVERRIDE_TRANSITION_CLOSE নির্দিষ্ট করার সময়, enterAnim হল Activity A এর enter অ্যানিমেশন এবং exitAnim হল Activity B এর exit অ্যানিমেশন।

টুকরো সহ প্রেডিক্টিভ ব্যাক এর জন্য সমর্থন যোগ করুন

ফ্র্যাগমেন্ট সহ প্রেডিক্টিভ ব্যাক বাস্তবায়নের সময়, দুটি পদ্ধতি রয়েছে।

বিদ্যমান API গুলি ব্যবহার করুন

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

নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • ট্রানজিশন ১.৫.০ বা তার পরবর্তী এবং ফ্র্যাগমেন্ট ১.৭.০ বা তার পরবর্তী সংস্করণ আমদানি করুন। ফ্র্যাগমেন্টের মধ্যে বেশিরভাগ ভবিষ্যদ্বাণীমূলক ব্যাক সাপোর্ট ট্রানজিশনের অ্যানিমেশন খোঁজার উপর নির্ভর করে, যা শুধুমাত্র ট্রানজিশন ১.৫.০ বা তার পরবর্তী সংস্করণে সম্ভব।
  • ব্যাক স্ট্যাক পরিচালনা করার জন্য Fragments ব্যবহার করুন, FragmentManager অথবা Navigation Component এর মাধ্যমে। আপনি যদি নিজের ব্যাক স্ট্যাক পরিচালনা করেন তবে Predictiv Back সমর্থিত নয়। FragmentManager যে ব্যাক স্ট্যাকগুলি সম্পর্কে জানে না সেগুলি থেকে দূরে স্থানান্তর করুন।
  • কিছু লাইব্রেরিতে প্রেডিক্টিভ ব্যাক সাপোর্ট রয়েছে। নিশ্চিত হতে ডকুমেন্টেশন পরীক্ষা করুন।
  • Animator ক্লাস এবং AndroidX Transition লাইব্রেরি সমর্থিত।
  • Animation ক্লাস এবং ফ্রেমওয়ার্ক Transition লাইব্রেরি সমর্থিত নয়।
  • ভবিষ্যদ্বাণীমূলক অ্যানিমেশনগুলি শুধুমাত্র Android 14 বা তার উচ্চতর ভার্সন চালিত ডিভাইসগুলিতে কাজ করে।

নিম্নলিখিত পরিস্থিতিতে ভবিষ্যদ্বাণীমূলক ব্যাক ক্রস-ফ্র্যাগমেন্ট ব্যবহার করুন:

কিছু উপাদান গতি 1.12.02-alpha02 বা তার বেশি ভবিষ্যদ্বাণীমূলক ব্যাক সমর্থন করে, যার মধ্যে রয়েছে MaterialFadeThrough , MaterialSharedAxis এবং MaterialFade

কলব্যাক ব্যবহার করুন

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

একটি OnBackPressedCallback তৈরি করুন। handleOnBackProgressed এর মধ্যে, টুকরোটি স্কেল করুন এবং স্থানান্তর করুন। তারপর ব্যাক স্ট্যাক থেকে পপ করুন। এরপর, কলব্যাকের বাইরে setSharedElementReturnTransition ব্যবহার করে শেয়ার্ড এলিমেন্ট ট্রানজিশনটি চালান।

আরও তথ্যের জন্য, GitHub-এ কোড নমুনা দেখুন।

আবশ্যকতা

targetSdkVersion এবং compileSdkVersion দ্বারা কী নিয়ন্ত্রিত হয়, ডিভাইস সংস্করণ, নির্ভরতা, ম্যানিফেস্ট ফ্ল্যাগ এবং ফ্র্যাগমেন্ট ফ্ল্যাগগুলি বুঝতে নিম্নলিখিত টেবিলটি ব্যবহার করুন। এই টেবিলটি কোডের প্রয়োজনীয়তাগুলি উল্লেখ করে।

বিভাগ অ্যানিমেশন কম্পাইলএসডিকে টার্গেটএসডিকে ডিভাইস সংস্করণ অ্যান্ড্রয়েড: সক্ষম করুনঅনব্যাকইনভোকডকলব্যাক নির্ভরতা
সিস্টেম অ্যানিমেশন ঘরে ফিরে যাওয়া ৩৩ যেকোনো ৩৫ সত্য কোনটিই নয়
ক্রস-অ্যাক্টিভিটি ৩৪ যেকোনো ৩৫ সত্য কোনটিই নয়
ক্রস-টাস্ক ৩৪ যেকোনো ৩৫ সত্য কোনটিই নয়
প্ল্যাটফর্ম কাস্টম ক্রস-অ্যাক্টিভিটি ৩৪ যেকোনো ৩৫ সত্য কোনটিই নয়
প্রোগ্রেস এপিআই প্ল্যাটফর্ম ৩৪ যেকোনো ৩৪ সত্য কোনটিই নয়
উপাদান উপাদান নীচের শীট ৩৪ যেকোনো ৩৪ সত্য উপাদান উপাদান 1.10.0
সাইড শিট ৩৪ যেকোনো ৩৪ সত্য উপাদান উপাদান 1.10.0
নেভিগেশন ড্রয়ার ৩৪ যেকোনো ৩৪ সত্য উপাদান উপাদান 1.10.0
অনুসন্ধান করুন ৩৪ যেকোনো ৩৪ সত্য উপাদান উপাদান 1.10.0
জেটপ্যাক অ্যানিমেশন কাস্টম AndroidX ক্রস-ফ্র্যাগমেন্ট ৩৪ যেকোনো ৩৪ সত্য অ্যান্ড্রয়েডএক্স ফ্র্যাগমেন্ট ১.৭
কাস্টম অ্যান্ড্রয়েডএক্স ট্রানজিশন ৩৪ যেকোনো ৩৪ সত্য অ্যান্ড্রয়েডএক্স ট্রানজিশন ১.৫
প্রোগ্রেস এপিআই জেটপ্যাক ৩৪ যেকোনো ৩৪ সত্য অ্যান্ড্রয়েডএক্স অ্যাক্টিভিটি ১.৮

অতিরিক্ত সম্পদ