هنگام استفاده از APIهای بازگشتی سیستم، میتوانید در دریافت انیمیشنهای درونبرنامه و پشتیبانی از انتقالهای سفارشی شرکت کنید.
پس از انتخاب، برنامه شما انیمیشن هایی را برای بازگشت به خانه، فعالیت متقابل و وظایف متقابل نمایش می دهد.
همچنین میتوانید وابستگی مولفه مواد خود را به نسخه 1.10.0 MDC Android ارتقا دهید تا انیمیشنهای مؤلفه مواد مانند موارد زیر را دریافت کنید:
برای اطلاعات بیشتر به راهنمای توسعهدهنده مولفه مواد در GitHub مراجعه کنید.
این ویدئو نمونه کوتاهی از انیمیشنهای پیشبینیکننده بازگشت را برای فعالیت متقابل و بازگشت به خانه با استفاده از برنامه تنظیمات اندروید نشان میدهد.
- در انیمیشن، کاربر برای بازگشت به صفحه تنظیمات قبلی - نمونهای از یک انیمیشن متقابل، انگشت خود را به عقب برمیگرداند.
- اکنون در صفحه قبلی، کاربر برای بار دوم شروع به کشیدن انگشت به عقب می کند و پیش نمایشی از صفحه اصلی را به همراه کاغذدیواری آن نشان می دهد - نمونه ای از انیمیشن بازگشت به خانه.
- کاربر همچنان به کشیدن انگشت خود به سمت راست ادامه می دهد و انیمیشنی از پنجره را نشان می دهد که به سمت نماد در صفحه اصلی کوچک می شود.
- کاربر اکنون به طور کامل به صفحه اصلی بازگشته است.
درباره نحوه افزودن پشتیبانی برای حرکات پیشگویانه برگشت بیشتر بیاموزید.
انتقال ها و انیمیشن های درون برنامه ای سفارشی را اضافه کنید
میتوانید انیمیشنها و انتقالهای دارایی درونبرنامهای، انیمیشنهای متقابل سفارشی، و انیمیشنهای متقابل قطعه سفارشی را با حرکات پیشبینی کننده پشت ایجاد کنید.
با استفاده از Progress API، انتقال های سفارشی را اضافه کنید
با AndroidX Activity 1.8.0-alpha01 یا بالاتر، میتوانید از APIهای Predictive Back Progress برای ایجاد انیمیشنهای سفارشی برای حرکت پیشبینی کننده برگشت در برنامه خود استفاده کنید. API های Progress در متحرک سازی نماها مفید هستند، اما هنگام متحرک سازی انتقال بین قطعات دارای محدودیت هایی هستند. در OnBackPressedCallback روشهای handleOnBackProgressed ، handleOnBackCancelled و handleOnBackStarted را برای متحرک کردن اشیا در حالی که کاربر به عقب میکشد، معرفی کردهایم. اگر نیاز به سفارشی سازی بیشتر از انیمیشن های پیش فرض ارائه شده توسط سیستم یا انیمیشن های Material Component دارید، از این روش ها استفاده کنید.
ما انتظار داریم که اکثر برنامهها از APIهای سازگار با عقب AndroidX استفاده کنند، اما APIهای پلتفرم مشابهی نیز در رابط OnBackAnimationCallback برای آزمایش در پیشنمایش برنامهنویس Android 14 1 و بالاتر در دسترس هستند.
از API های Progress با AndroidX Transitions استفاده کنید
APIهای Progress را میتوان با AndroidX Transitions 1.5.0-alpha01 یا بالاتر در Android 14 و نسخههای جدیدتر برای ایجاد انتقالهای برگشتی پیشبینیکننده استفاده کرد.
- از
TransitionManager#controlDelayedTransitionبه جایbeginDelayedTransitionبرای پخش انتقال ها در حالی که کاربر به سمت عقب حرکت می کند، استفاده کنید. - انتقال را در
handleOnBackStartedایجاد کنید. - انتقال را با رویداد back در
handleOnBackProgressedبا ربط دادنcurrentFractionبهBackEvent.progressپخش کنید که نشان می دهد کاربر چقدر به عقب رفته است. - پس از اینکه کاربر ژست برگشتی را در
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>
هنگام کار با Transitions Back Predictive، موارد زیر را در نظر داشته باشید:
- از
isSeekingSupportedبرای بررسی اینکه آیا انتقال از Predictive Back پشتیبانی می کند یا خیر استفاده کنید. -
isSeekingSupportedنادیده بگیرید تا برای انتقالهای سفارشیتان، true باشد. - برای هر انیمیشن یک کنترلر ایجاد کنید.
- انتقالهای برگشت پیشبینیکننده با انتقالهای AndroidX پشتیبانی میشوند، اما نه با انتقالهای چارچوب. از انتقال فریمورک دور شوید و به جای آن از انتقال
Animatorو AndroidX استفاده کنید. - انتقال پیشبینیکننده به عقب در دستگاههای دارای Android نسخه ۱۴ و بالاتر پشتیبانی میشود و با نسخه قبلی سازگار نیستند.
- انتقال ایجاد شده با صحنه های XML نیز پشتیبانی می شود. در
handleOnBackStarted،TransitionSeekControllerخود را به جای نتیجهcontrolDelayedTransitionروی نتیجهTransitionManager.createSeekControllerقرار دهید.
انتقال فعالیت های سفارشی را در Android 14 و بالاتر اضافه کنید
برای اطمینان از اینکه انتقالهای فعالیت سفارشی از Predictive Back در Android نسخه ۱۴ و بالاتر پشتیبانی میکنند، میتوانید به جای overrideActivityTransition از overridePendingTransition استفاده کنید. این به این معنی است که انیمیشن انتقال زمانی پخش میشود که کاربر به عقب برمیگردد.
برای ارائه مثالی از نحوه عملکرد، سناریویی را تصور کنید که در آن فعالیت B در بالای فعالیت A در پشته پشتی قرار دارد. شما می توانید انیمیشن های Activity سفارشی را به روش زیر مدیریت کنید:
- انتقال باز یا بسته شدن را در متد
onCreateفعالیت B فراخوانی کنید. - وقتی کاربر به فعالیت B میرود، از
OVERRIDE_TRANSITION_OPENاستفاده کنید. هنگامی که کاربر برای پیمایش به فعالیت A تند تند میکشد، ازOVERRIDE_TRANSITION_CLOSEاستفاده کنید. هنگام تعیین
OVERRIDE_TRANSITION_CLOSE،enterAnimانیمیشن ورودی فعالیت A وexitAnimانیمیشن خروجی فعالیت B است.
پشتیبانی از Predictive Back با قطعات را اضافه کنید
هنگام اجرای Predictive Back با قطعات، دو رویکرد وجود دارد.
از API های موجود استفاده کنید
توصیه می کنیم از API های موجود استفاده کنید. این APIها به شما این امکان را میدهند که از لبه صفحه تند بکشید تا انتقالهای Animator یا Androidx خود را با ژست دستکاری کنید. اینکه ژست را از یک آستانه عبور دهید، تعیین میکند که آیا کامل شده و به قطعه قبلی برمیگردید یا لغو شده و روی قطعه فعلی باقی میمانید. برای اطلاعات بیشتر، به پیمایش بین قطعات با استفاده از انیمیشن ها مراجعه کنید.
عوامل زیر را در نظر داشته باشید:
- وارد کردن Transitions 1.5.0 یا بالاتر و Fragments 1.7.0 یا بالاتر. بسیاری از پشتیبانی پیشبینیکننده پیشبینی در Fragments به این بستگی دارد که Transitions بتواند انیمیشنها را جستجو کند، که فقط در Transitions 1.5.0 یا بالاتر امکانپذیر است.
- از Fragments با
FragmentManagerیا Navigation Component برای مدیریت پشته استفاده کنید. اگر پشته پشتی خود را مدیریت کنید، «بازگشت پیشبینی» پشتیبانی نمیشود. از پشتههایی کهFragmentManagerاز آنها اطلاعی ندارد، مهاجرت کنید. - برخی از کتابخانه ها شامل پشتیبانی Predictive Back هستند. برای اطمینان مدارک را بررسی کنید.
- کلاس
Animatorو کتابخانهAndroidX Transitionپشتیبانی می شوند. - کلاس
Animationو کتابخانه FrameworkTransitionپشتیبانی نمی شود. - انیمیشنهای پیشبینیکننده فقط روی دستگاههایی کار میکنند که اندروید 14 یا بالاتر دارند.
در شرایط زیر از قطعات متقاطع پشت پیش بینی کننده استفاده کنید:
- مولفه ناوبری را متحرک کنید .
- با
setCustomAnimationsمتحرک سازی کنید. - انتقال ورود و خروج را با
setEnterTransition،setExitTransition،setReenterTransitionوsetReturnTransitionمتحرک کنید. - انتقال عناصر مشترک را با
setSharedElementEnterTransitionوsetSharedElementReturnTransitionمتحرک کنید.
برخی از حرکات مواد از پیش بینی 1.12.02-alpha02 یا بالاتر پشتیبانی می کنند، از جمله MaterialFadeThrough ، MaterialSharedAxis و MaterialFade .
از تماس های برگشتی استفاده کنید
میتوانید با استفاده از تماسهای متقابل، یک انتقال متقاطع قطعه ایجاد کنید، با این حال محدودیتهای شناخته شدهای در هنگام استفاده از تماسهای برگشتی وجود دارد که کاربران نمیتوانند قطعه قبلی را هنگام کشیدن انگشت به عقب ببینند. برای ایجاد یک انتقال عنصر مشترک متقاطع که مطابق با راهنمای طراحی پشتی پیشبینی است، موارد زیر را انجام دهید:
یک OnBackPressedCallback ایجاد کنید. در handleOnBackProgressed ، قطعه را مقیاس و تغییر دهید. سپس از پشته بیرون بزنید. سپس، انتقال عنصر مشترک را با استفاده از setSharedElementReturnTransition خارج از فراخوان اجرا کنید.
برای اطلاعات بیشتر، نمونه کد را در GitHub ببینید.
الزامات
از جدول زیر برای درک آنچه توسط targetSdkVersion و compileSdkVersion ، نسخه دستگاه، وابستگیها، پرچمهای مانیفست و پرچمهای قطعه کنترل میشود، استفاده کنید. این جدول به الزامات کد اشاره دارد.
| دسته بندی | انیمیشن | compileSdk | targetSdk | نسخه دستگاه | android:enableOnBackInvokedCallback | وابستگی |
|---|---|---|---|---|---|---|
| انیمیشن های سیستمی | بازگشت به خانه | 33 | هر | 35 | درست است | هیچ کدام |
| فعالیت متقابل | 34 | هر | 35 | درست است | هیچ کدام | |
| وظیفه متقابل | 34 | هر | 35 | درست است | هیچ کدام | |
| پلت فرم | فعالیت متقابل سفارشی | 34 | هر | 35 | درست است | هیچ کدام |
| پلتفرم API Progress | 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 | درست است | AndroidX Fragment 1.7 |
| انتقال سفارشی AndroidX | 34 | هر | 34 | درست است | AndroidX Transition 1.5 | |
| Progress API Jetpack | 34 | هر | 34 | درست است | AndroidX Activity 1.8 |