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

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

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

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

আপনি নিম্নলিখিতগুলির মতো উপাদান উপাদান অ্যানিমেশনগুলি পেতে আপনার উপাদান উপাদান নির্ভরতাকে MDC Android এর v1.10.0 এ আপগ্রেড করতে পারেন:

আরও তথ্যের জন্য GitHub-এ উপাদানের উপাদান বিকাশকারী নির্দেশিকা দেখুন।

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

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

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

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

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

অগ্রগতি API ব্যবহার করে কাস্টম রূপান্তর যোগ করুন

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

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

AndroidX ট্রানজিশন সহ অগ্রগতি API ব্যবহার করুন

অগ্রগতি API গুলিকে Android 14 এবং পরবর্তীতে AndroidX Transitions 1.5.0-alpha01 বা উচ্চতর ভবিষ্যদ্বাণীমূলক ব্যাক ট্রানজিশন তৈরি করতে ব্যবহার করা যেতে পারে।

  1. TransitionManager#controlDelayedTransition এর পরিবর্তে ট্রানজিশন চালাতে beginDelayedTransition ব্যবহার করুন যখন ব্যবহারকারী ফিরে সোয়াইপ করে।
  2. handleOnBackStarted এর মধ্যে রূপান্তর তৈরি করুন।
  3. BackEvent.progress এর সাথে currentFraction রিলেট করে handleOnBackProgressed মধ্যে ব্যাক ইভেন্টের সাথে ট্রানজিশন খেলুন যা ব্যবহারকারী কতদূর ব্যাক সোয়াইপ করেছে তা প্রকাশ করে।
  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 এ, controlDelayedTransition এর ফলাফলের পরিবর্তে TransitionManager.createSeekController এর ফলাফলে আপনার TransitionSeekController সেট করুন।

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

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

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

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

টুকরা সহ ভবিষ্যদ্বাণীপূর্ণ পিছনে সমর্থন যোগ করুন

ভবিষ্যদ্বাণীমূলক ব্যাককে খণ্ডের সাথে প্রয়োগ করার সময়, দুটি পন্থা রয়েছে।

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

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

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

  • ট্রানজিশন 1.5.0 বা তার পরে এবং ফ্র্যাগমেন্ট 1.7.0 বা তার পরে আমদানি করুন। ফ্র্যাগমেন্টের মধ্যে বেশিরভাগ ভবিষ্যদ্বাণীমূলক ব্যাক সমর্থন ট্রানজিশনগুলি অ্যানিমেশনগুলি সন্ধান করতে সক্ষম হওয়ার উপর নির্ভর করে, যা কেবলমাত্র 1.5.0 বা পরবর্তী ট্রানজিশনে সম্ভব।
  • ব্যাক স্ট্যাকটি পরিচালনা করতে FragmentManager বা নেভিগেশন কম্পোনেন্ট সহ ফ্র্যাগমেন্ট ব্যবহার করুন। আপনি যদি নিজের ব্যাক স্ট্যাক পরিচালনা করেন তাহলে প্রেডিকটিভ ব্যাক সমর্থিত নয়। FragmentManager জানেন না এমন ব্যাক স্ট্যাকগুলি থেকে দূরে স্থানান্তর করুন৷
  • কিছু লাইব্রেরি প্রেডিক্টিভ ব্যাক সাপোর্ট অন্তর্ভুক্ত করে। নিশ্চিত হতে ডকুমেন্টেশন চেক করুন.
  • Animator ক্লাস এবং AndroidX Transition লাইব্রেরি সমর্থিত।
  • Animation ক্লাস এবং ফ্রেমওয়ার্ক Transition লাইব্রেরি সমর্থিত নয়।
  • ভবিষ্যদ্বাণীমূলক অ্যানিমেশনগুলি শুধুমাত্র Android 14 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে কাজ করে।

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

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

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

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

একটি OnBackPressedCallback তৈরি করুন। Within handleOnBackProgressed , scale and shift the fragment. তারপর পিছনে স্ট্যাক থেকে পপ. এরপরে, কলব্যাকের বাইরে setSharedElementReturnTransition ব্যবহার করে শেয়ার্ড এলিমেন্ট ট্রানজিশন চালান।

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

প্রয়োজনীয়তা

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

শ্রেণী অ্যানিমেশন compileSdk টার্গেটএসডিকে ডিভাইস সংস্করণ android:enableOnBackInvokedCallback নির্ভরতা
সিস্টেম অ্যানিমেশন বাড়ি ফিরে 33 যে কোন 35 সত্য কোনোটিই নয়
ক্রস কার্যকলাপ 34 যে কোন 35 সত্য কোনোটিই নয়
ক্রস-টাস্ক 34 যে কোন 35 সত্য কোনোটিই নয়
প্ল্যাটফর্ম কাস্টম ক্রস কার্যকলাপ 34 যে কোন 35 সত্য কোনোটিই নয়
অগ্রগতি API প্ল্যাটফর্ম 34 যে কোন 34 সত্য কোনোটিই নয়
উপাদান উপাদান নীচের শীট 34 যে কোন 34 সত্য উপাদান উপাদান 1.10.0
সাইড শীট 34 যে কোন 34 সত্য উপাদান উপাদান 1.10.0
নেভিগেশন ড্রয়ার 34 যে কোন 34 সত্য উপাদান উপাদান 1.10.0
অনুসন্ধান করুন 34 যে কোন 34 সত্য উপাদান উপাদান 1.10.0
জেটপ্যাক অ্যানিমেশন কাস্টম AndroidX ক্রস-টুকরা 34 যে কোন 34 সত্য অ্যান্ড্রয়েডএক্স ফ্র্যাগমেন্ট 1.7
কাস্টম অ্যান্ড্রয়েডএক্স ট্রানজিশন 34 যে কোন 34 সত্য অ্যান্ড্রয়েডএক্স ট্রানজিশন 1.5
অগ্রগতি API জেটপ্যাক 34 যে কোন 34 সত্য AndroidX কার্যকলাপ 1.8

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