عند استخدام واجهات برمجة تطبيقات النظام للخلف، يمكنك تفعيل خيار تلقّي الصور المتحركة داخل التطبيق وإتاحة الانتقالات المخصّصة.
بعد تفعيل هذه الميزة، يعرض تطبيقك صورًا متحركة عند العودة إلى المنزل والأنشطة المتبادلة والأنشطة المتعددة.
يمكنك أيضًا ترقية اعتمادية مكونات المواد إلى الإصدار 1.10.0 من MDC في Android لتلقي الرسوم المتحركة لمكونات المواد كما يلي:
يمكنك الاطّلاع على إرشادات مطوّري مكونات المواد على GitHub لمزيد من المعلومات.
يعرض الفيديو مثالاً موجزًا للصور المتحركة التنبؤية للظهر للنشاط المتبادل والعودة إلى المنزل باستخدام تطبيق إعدادات Android.
- في الرسوم المتحركة، يمرر المستخدم سريعًا مرة أخرى للعودة إلى شاشة الإعدادات السابقة - مثال على الرسوم المتحركة متعددة الأنشطة.
- في الشاشة السابقة الآن، يبدأ المستخدم بالتمرير السريع مرة أخرى، مع عرض معاينة للشاشة الرئيسية مع خلفيتها - مثال على الرسوم المتحركة للعودة إلى الصفحة الرئيسية.
- يستمر المستخدم في التمرير سريعًا إلى اليمين، وتعرض رسمًا متحركًا للنافذة تتقلص إلى الأيقونة الموجودة على الشاشة الرئيسية.
- عاد المستخدم الآن بالكامل إلى الشاشة الرئيسية.
تعرَّف على مزيد من المعلومات حول كيفية إتاحة إيماءات الرجوع التنبؤية.
إضافة انتقالات وصور متحركة مخصصة داخل التطبيق
يمكنك إنشاء صور متحركة وانتقالات مخصصة للمواقع داخل التطبيق، وصور متحركة مخصصة على مستوى الأنشطة المتعددة، وصور متحركة مخصصة على شكل أجزاء متقاطعة، باستخدام إيماءات تنبؤية للظهر.
إضافة عمليات انتقال مخصّصة باستخدام Progress API
باستخدام الإصدار 1.8.0-alpha01 أو الإصدارات الأحدث من نظام التشغيل AndroidX، يمكنك استخدام واجهات برمجة التطبيقات القائمة على توقُّع مستوى تقدّم الرجوع في التطبيق لتطوير رسوم متحركة مخصّصة
لإيماءة الرجوع التنبئي في تطبيقك. تُعدّ واجهات برمجة التطبيقات الخاصة بالتقدّم مفيدة في تحريك طرق العرض ولكن لها قيود عند إضافة تأثيرات حركية بين الأجزاء. في
OnBackPressedCallback
،
طرحنا طرق
handleOnBackProgressed
وhandleOnBackCancelled
وhandleOnBackStarted
لتحريك العناصر أثناء تمرير المستخدم سريعًا للخلف. استخدم هذه الطرق إذا كنت بحاجة إلى تخصيص أكثر من الرسوم المتحركة
الافتراضية التي يوفرها النظام، أو الصور المتحركة
لمكونات Material.
نتوقّع أن تستخدم معظم التطبيقات واجهات برمجة تطبيقات AndroidX المتوافقة مع الأنظمة القديمة، ولكن تتوفّر أيضًا واجهات برمجة تطبيقات مماثلة للأنظمة الأساسية في واجهة OnBackAnimationCallback
يمكن اختبارها في الإصدار 1 من "معاينة المطوِّر" من نظام التشغيل Android 14 والإصدارات الأحدث.
استخدام واجهات برمجة تطبيقات التقدم مع عمليات النقل من AndroidX
يمكن استخدام واجهات برمجة التطبيقات Progress مع إصدارات AndroidX Transitions 1.5.0-alpha01 أو الإصدارات الأحدث على نظام التشغيل Android 14 والإصدارات الأحدث لإنشاء عمليات انتقال توقّعية إلى الوراء.
- يمكنك استخدام
TransitionManager#controlDelayedTransition
بدلاً منbeginDelayedTransition
لتشغيل الانتقالات أثناء تمرير المستخدم سريعًا للخلف. - أنشئ عملية النقل في غضون
handleOnBackStarted
. - يمكنك تشغيل العنصر الانتقالي مع الحدث الخلفي في
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>
عند التعامل مع الانتقالات التنبؤية إلى الوراء، ضع ما يلي في الاعتبار:
- استخدِم
isSeekingSupported
للتأكّد من أنّ تأثير الانتقال يتوافق مع ميزة "الرجوع إلى الشاشة السابقة". - يمكنك إلغاء
isSeekingSupported
للعودة إلى "صحيح" لعمليات النقل المخصّصة. - يمكنك إنشاء وحدة تحكم واحدة لكل صورة متحركة.
- يتم دعم انتقالات الرجوع التنبؤية مع عمليات انتقال AndroidX، ولكن ليس مع انتقالات إطار العمل. لذلك نقترح الانتقال بعيدًا عن انتقالات إطار العمل.
- تتوفّر عمليات الانتقال إلى الخلف التنبؤية على الأجهزة التي تعمل بنظام التشغيل Android 14 والإصدارات الأحدث ولا تتوافق مع الأنظمة القديمة.
- تتوفر أيضًا الانتقالات التي تم إنشاؤها باستخدام مشاهد XML. في ميزة "
handleOnBackStarted
"، اضبطTransitionSeekController
على نتيجةTransitionManager.createSeekController
بدلاً من نتيجةcontrolDelayedTransition
.
إضافة عمليات انتقال مخصّصة بين الأنشطة على نظام التشغيل Android 14 والإصدارات الأحدث
لضمان أنّ عمليات انتقال قسم "النشاط" المخصّصة تتوافق مع ميزة "إيماءة إظهار شاشة الرجوع" على نظام التشغيل Android 14
والإصدارات الأحدث، يمكنك استخدام overrideActivityTransition
بدلاً من
overridePendingTransition
. هذا يعني أن الرسوم المتحركة للانتقال يتم
تشغيلها أثناء التمرير السريع للمستخدم مرة أخرى.
لتقديم مثال حول كيفية عمل ذلك، تخيل سيناريو يكون فيه النشاط ب أعلى النشاط "أ" في الحزمة الخلفية. ستتعامل مع الرسوم المتحركة للنشاط المخصص بالطريقة التالية:
- عليك استدعاء إما فتحات الانتقال أو إغلاقها ضمن طريقة
onCreate
في النشاط ب. - عندما ينتقل المستخدم إلى النشاط ب، استخدم
OVERRIDE_TRANSITION_OPEN
. عندما يمرر المستخدم سريعًا للرجوع إلى النشاط "أ"، استخدمOVERRIDE_TRANSITION_CLOSE
. عند تحديد
OVERRIDE_TRANSITION_CLOSE
، تكون الحركةenterAnim
هي حركة إدخال النشاط "أ" وexitAnim
هي حركة الخروج في النشاط "ب".
إتاحة ميزة "إيماءة إظهار شاشة الرجوع" مع أجزاء
عند تنفيذ ميزة "الرجوع التنبؤي" مع الأجزاء، هناك نهجان.
استخدام واجهات برمجة التطبيقات الحالية
ننصحك باستخدام واجهات برمجة التطبيقات الحالية. تسمح لك واجهات برمجة التطبيقات هذه بالتمرير السريع من حافة الشاشة لمعالجة انتقالات Animator أو Androidx باستخدام الإيماءة. وسواء نقرت على الإيماءة بعد حدّ معيّن، سيتم تحديد ما إذا كانت قد اكتملت أم لا، وستنتقل إلى الجزء السابق، أو سيتم إلغاؤها مع الإبقاء على الجزء الحالي. لمزيد من المعلومات، راجِع التنقل بين الأجزاء باستخدام الرسوم المتحركة.
يُرجى مراعاة العوامل التالية:
- قم باستيراد الانتقالات 1.5.0 أو لاحقًا وFragments 1.7.0 أو أحدث. يعتمد الكثير من الدعم التنبؤي داخل الأجزاء على قدرة الانتقالات على البحث عن الرسوم المتحركة، وهو ما لا يمكن إلا في الانتقالات 1.5.0 أو الإصدارات الأحدث.
- استخدِم الأجزاء مع
FragmentManager
أو مكوِّن التنقّل للتعامل مع الحزمة الخلفية. لا تتوفّر ميزة "رجوع" إذا كنت تدير الحزمة الخلفية الخاصة بك. - تتضمن بعض المكتبات ميزة "إيماءة إظهار شاشة الرجوع". تحقق من الوثائق للتأكد.
- صف
Animator
ومكتبةAndroidX Transition
متوافقان. - لا تتوفّر مكتبة
Transition
لصفAnimation
وإطار العمل. - لا تعمل الصور المتحركة التنبؤية إلا على الأجهزة التي تعمل بالإصدار 14 من نظام التشغيل Android أو الإصدارات الأحدث.
استخدِم أجزاء متقاطعة توقّعية تظهر على الشاشة في الحالات التالية:
- إضفاء المؤثر الحركي على مكوِّن التنقل
- أضِف تأثيرات حركية باستخدام
setCustomAnimations
. - أضِف تأثيرات حركية إلى عمليات الدخول والخروج باستخدام
setEnterTransition
وsetExitTransition
وsetReenterTransition
وsetReturnTransition
. - يمكنك تحريك انتقالات العناصر المشتركة باستخدام
setSharedElementEnterTransition
وsetSharedElementReturnTransition
.
إنّ بعض حركات المواد
تتيح عملية توقّع الرجوع إلى الوراء بدءًا من
1.12.02-alpha02
أو الإصدارات الأحدث، بما في ذلك MaterialFadeThrough
وMaterialSharedAxis
و
MaterialFade
. تجدر الإشارة إلى أنّ السمة MaterialContainerTransform
لا تتيح
استخدام عبارات البحث السابقة التنبؤية.
استخدام عمليات معاودة الاتصال
يمكنك إنشاء انتقال بين أجزاء متقاطعة باستخدام عمليات الاستدعاء، ولكن هناك قيدًا معروفًا عند استخدام عمليات معاودة الاتصال حيث لا يمكن للمستخدمين رؤية الجزء السابق عند التمرير سريعًا للخلف. لإنشاء انتقال عنصر مشترَك عبر أجزاء متقاطعة يتوافق مع إرشادات التصميم الخلفي التنبؤية، قم بالتالي:
أنشِئ OnBackPressedCallback
. داخل handleOnBackProgressed
، يمكنك تغيير حجم الجزء
وتغييره. ثم انبثق من الحزمة الخلفية. بعد ذلك، نفِّذ نقل العنصر المشترَك
باستخدام setSharedElementReturnTransition
خارج وقت معاودة الاتصال.
لمزيد من المعلومات، يمكنك الاطّلاع على نموذج الرمز البرمجي على GitHub.
الشروط
استخدِم الجداول التالية لفهم العناصر التي يتم التحكّم فيها من خلال خيارات المطوّرين،
وtargetSdkVersion
وcompileSdkVersion
وإصدار الجهاز والتبعيات
وعلامات البيان وعلامات الأجزاء. يشير الجدول الأول إلى متطلبات التعليمة البرمجية.
الفئة | Animation | حزمة تطوير البرامج (Sdk) | هدف Sdk | android:enableOnBackInvokedCallback | التبعية |
---|---|---|---|---|---|
الصور المتحركة للنظام | العودة إلى الصفحة الرئيسية | 33 | هل لديك | TRUE | بدون تحديد نمط |
النشاط المتبادل | 34 | هل لديك | TRUE | بدون تحديد نمط | |
تعدد المهام | 34 | هل لديك | TRUE | بدون تحديد نمط | |
النظام الأساسي | النشاط المتبادل المخصّص | 34 | هل لديك | TRUE | بدون تحديد نمط |
منصة Progress API | 34 | هل لديك | TRUE | بدون تحديد نمط | |
مكونات مادية | بطاقة سفلية | 34 | هل لديك | TRUE | المكوّن المتعدد الأبعاد 1.10.0 |
ورقة جانبية | 34 | هل لديك | TRUE | المكوّن المتعدد الأبعاد 1.10.0 | |
لائحة التنقّل | 34 | هل لديك | TRUE | المكوّن المتعدد الأبعاد 1.10.0 | |
بحث | 34 | هل لديك | TRUE | المكوّن المتعدد الأبعاد 1.10.0 | |
الصور المتحركة في Jetpack | التجزئة المتقاطعة المخصّصة لنظام AndroidX | 34 | هل لديك | TRUE | جزء AndroidX 1.7 |
عمليات نقل مخصّصة من AndroidX | 34 | هل لديك | TRUE | AndroidX Transition 1.5 | |
Progress API Jetpack | 34 | هل لديك | TRUE | النشاط على AndroidX 1.8 |
يشير الجدول التالي إلى المتطلبات التي تسمح للمستخدمين بمشاهدة الصور المتحركة.
الفئة | Animation | تم تفعيل خيار المطوّر | إصدار الجهاز |
---|---|---|---|
الصور المتحركة للنظام | العودة إلى الصفحة الرئيسية | TRUE | 33 |
النشاط المتبادل | TRUE | 34 | |
تعدد المهام | TRUE | 34 | |
النظام الأساسي | النشاط المتبادل المخصّص | TRUE | 34 |
منصة Progress API | خطأ | 34 | |
مكونات مادية | بطاقة سفلية | خطأ | 34 |
ورقة جانبية | خطأ | 34 | |
لائحة التنقّل | خطأ | 34 | |
بحث | خطأ | 34 | |
الصور المتحركة في Jetpack | التجزئة المتقاطعة المخصّصة لنظام AndroidX | خطأ | 34 |
عمليات نقل مخصّصة من AndroidX | خطأ | 34 | |
Progress API Jetpack | خطأ | 34 |