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

আপনি ভিউস বা কম্পোজ ব্যবহার করে কাস্টম ইন-অ্যাপ প্রপার্টি অ্যানিমেশন ও ট্রানজিশন, কাস্টম ক্রস-অ্যাক্টিভিটি অ্যানিমেশন এবং প্রেডিক্টিভ ব্যাক জেসচার সহ কাস্টম ক্রস-ফ্র্যাগমেন্ট অ্যানিমেশন তৈরি করতে পারেন। কম্পোজ পদ্ধতিটি চেষ্টা করার জন্য, “প্রেডিক্টিভ ব্যাক অ্যানিমেশনের জন্য সমর্থন যোগ করুন” দেখুন।

Progress API ব্যবহার করে কাস্টম ট্রানজিশন যোগ করুন

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

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

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

Android 14 এবং তার পরবর্তী সংস্করণগুলিতে Predictive Back ট্রানজিশন তৈরি করার জন্য Progress API-গুলি AndroidX Transitions 1.5.0-alpha01 বা তার উচ্চতর সংস্করণের সাথে ব্যবহার করা যেতে পারে।

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

নিম্নলিখিত ভিডিও, কোটলিন কোড এবং এক্সএমএল-এ 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>

Predictive Back ট্রানজিশন নিয়ে কাজ করার সময় নিম্নলিখিত বিষয়গুলো মনে রাখবেন:

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

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