میتوانید بااستفاده از «نماها» یا Compose، پویانماییها و انتقالهای سفارشی برای ویژگیهای درونبرنامه، پویانماییهای سفارشی برای بین فعالیتها، و پویانماییهای سفارشی برای بین قطعهها با اشارههای برگشت پیشگویانه ایجاد کنید. برای امتحان کردن روش Compose، افزودن پشتیبانی از پویانماییهای اشاره برگشت پیشگویانه را ببینید.
افزودن گذرهای سفارشی بااستفاده از Progress API
با AndroidX Activity نسخه 1.8.0-alpha01 یا بالاتر، میتوانید از میاناهای برنامهسازی کاربردی «پیشرفت برگشت پیشگویانه» برای توسعه پویانماییهای سفارشی برای اشاره برگشت پیشگویانه در برنامهتان استفاده کنید. میاناهای برنامهسازی کاربردی «پیشرفت» برای پویانمایی کردن نماها مفید هستند اما هنگام پویانمایی کردن گذارها بین قطعهها محدودیتهایی دارند. در OnBackPressedCallback
روشهای handleOnBackProgressed، handleOnBackCancelled
و handleOnBackStarted را برای پویانمایی کردن اشیا هنگام تند کشیدن کاربر به عقب معرفی کردهایم. اگر لازم است بیشتر از پویانماییهای پیشفرض ارائهشده توسط سیستم یا پویانماییهای Material Component سفارشیسازی کنید، از این روشها استفاده کنید.
انتظار داریم اکثر برنامهها از میاناهای برنامهسازی کاربردی AndroidX سازگار با نسخه قدیمی استفاده کنند، اما میاناهای برنامهسازی کاربردی پلاتفرم مشابهی نیز در واسط OnBackAnimationCallback وجود دارد که برای آزمایش در Android 14 و نسخههای بالاتر دردسترس است.
استفاده از میاناهای برنامهسازی کاربردی Progress با AndroidX Transitions
از Progress API میتوان با AndroidX Transitions نسخه 1.5.0-alpha01 یا بالاتر در Android 14 و بالاتر برای ایجاد انتقالهای «بازگشت پیشبینانه» استفاده کرد.
- از
TransitionManager#controlDelayedTransitionبهجایbeginDelayedTransitionبرای پخش انتقالها هنگام تند کشیدن کاربر به عقب استفاده کنید. - گذار را در
handleOnBackStartedایجاد کنید. - Play the transition with the back event within
handleOnBackProgressedby relatingcurrentFractiontoBackEvent.progresswhich exposes how far the user has swiped back. - پساز اینکه کاربر اشاره برگشت را در
handleOnBackPressedانجام داد، گذار را تمام کنید. - درنهایت، وضعیت انتقال را در
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 نسخه ۱۴ و بالاتر پشتیبانی میشود و با نسخههای قدیمی سازگار نیست.
- از گذارهایی که با صحنههای XML ایجاد شدهاند نیز پشتیبانی میشود. در
handleOnBackStarted،TransitionSeekControllerرا بهجای نتیجهcontrolDelayedTransition، روی نتیجهTransitionManager.createSeekControllerتنظیم کنید.