Views-এ প্রেডিকটিভ ব্যাক অ্যানিমেশনের জন্য সহায়তা যোগ করা

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

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

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

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

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

Android 14 এবং তার পরবর্তী ভার্সনে, আগের ধাপে ফিরে যাওয়া সংক্রান্ত পূর্বাভাস ট্রানজিশন তৈরি করতে, AndroidX Transitions 1.5.0-alpha01 বা তার পরবর্তী ভার্সনের সাথে Progress API ব্যবহার করা যেতে পারে।

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

নিম্নলিখিত ভিডিও, Kotlin কোড এবং 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 ও AndroidX ট্রানজিশন ব্যবহার করুন।
  • Android 14 ও তার পরবর্তী যেকোনও ভার্সন আছে এমন ডিভাইসে আগের ধাপে ফিরে যাওয়া সংক্রান্ত পূর্বাভাস ট্রানজিশন কাজ করে এবং এটি ব্যাকওয়ার্ড কম্প্যাটিবল নয়।
  • XML সিন দিয়ে তৈরি করা ট্রানজিশনও কাজ করে। handleOnBackStarted-এ, controlDelayedTransition-এর ফলাফলের পরিবর্তে TransitionManager.createSeekController-এর ফলাফলে আপনার TransitionSeekController সেট করুন।

অতিরিক্ত রিসোর্স