فهم مراحل التمرير

يتم تقسيم التمرير إلى مراحل متعددة. يتم إرسال فرق الإدخال من خلال سلسلة من المراحل لضمان حصول كل مرحلة على فرصة لاستخدام الحركة أو التفاعل معها.

خلال هذه الدورة، يتم تمرير كل من الفرق المتاح في الإدخال والفرق المستهلك في الإدخال في كل خطوة. يوفّر ذلك لكل مرحلة السياق الكامل اللازم للاستجابة لحدث التمرير أو استخدامه أو الاستماع إليه.

مخطّط دورة التمرير الذي يعرض مراحل تمرير حدث تمرير المستخدم
الشكل 1. مخطّط دورة التمرير الذي يعرض مراحل تمرير حدث تمرير المستخدم

كما هو موضّح في الشكل 1، تتّبع عملية التمرير الترتيب التالي:

  1. تجاوز حد التمرير: يتلقّى أولاً فرق معلومات الإدخال الأوّلي، ما يمنح تجاوز حد التمرير فرصة التفاعل أولاً (على سبيل المثال، من خلال تخفيف تأثير التمديد النشط).
  2. التمرير المتداخل قبل التمرير: يتيح هذا الخيار إمكانية التفاعل مع التغيير في الإدخال قبل مرحلة التمرير. في هذه المرحلة، قد يتم استهلاك بعض دلتا الإدخال، أو قد تتم مراقبتها فقط لتفعيل تغييرات في واجهة المستخدم، مثل تصغير شريط التطبيق أو توسيعه.
  3. تحويل دلتا الإدخال: تعديل إشارة دلتا الإدخال الأوّلية استنادًا إلى اتجاه التخطيط لضمان سلوك التمرير الطبيعي لمزيد من المعلومات، يُرجى الاطّلاع على القسم تحويل فرق الإدخال.
  4. التمرير: تتلقّى هذه المرحلة دلتا الإدخال المتاح وغير المستهلك المعدَّلة لتتطابق مع إعدادات حاوية التمرير. ويستخدم عادةً هذا الفرق لتعديل إزاحة التمرير الخاصة به.
  5. العودة إلى دلتا الإدخال الأولي: تعود الدلتا المتاحة والمستهلكة من مرحلة التمرير السريع إلى علامة دلتا الإدخال الأولي الأصلية.
  6. التمرير المتداخل بعد التمرير: تتفاعل هذه المرحلة بعد اكتمال مرحلة التمرير الرئيسية، وتتلقّى الفروق المتاحة والمستهلكة التي تم تعديلها حديثًا. ويمكنه استهلاك أي بيانات إدخال متبقية أو استخدام سياق البيانات التي تم استهلاكها للتو.
  7. تجاوز حد التمرير: تنظر هذه المرحلة الأخيرة إلى الفروق النهائية المتاحة والمستهلكة. يتم عادةً استخدام أي بيانات إدخال متبقية متاحة تصل إلى هذه المرحلة لتفعيل تأثيرات الحواف، مثل التمدّد أو التوهّج، ما يشير إلى أنّ المستخدم قد وصل إلى حدود المساحة القابلة للتمرير.

تحويل دلتا الإدخال

يتطلّب التغيير في إدخال المؤشر تعديلات على الإشارات في جميع مراحل التمرير لتتوافق مع العقود المتوقّعة. قبل أن يصل التغيير إلى مرحلة التمرير، تعمل معدِّلات التمرير على تعديل التغيير في الإدخال استنادًا إلى الاتجاه وتنسيق العرض وسياقات الكتابة من اليمين إلى اليسار. يحدث ذلك لأنّ الإدخال الأولي يتتبّع حركة وحدات البكسل الفعلية للمؤشر على الشاشة (على سبيل المثال، تؤدي الحركة للأسفل إلى زيادة الإحداثي Y للشاشة، ما يؤدي إلى فرق موجب). ومع ذلك، لتحقيق "التمرير الطبيعي" حيث يتحرك المحتوى مع إصبعك، يعني السحب للأسفل أنّه يجب أن ينتقل إطار العرض للأعلى فوق المحتوى، وهو ما يتوافق مع إزاحة تمرير سالبة.

لا يتم تحويل دلتا الإدخال من مصادر إدخال أخرى، مثل عجلة الماوس أو لوحة اللمس، خلال مراحل التمرير.

مثال: تحريك المؤشر لليمين باستخدام Modifier.horizontalScroll()

رسم بياني يمثّل إيماءة يتم فيها تحريك المؤشر إلى اليسار
الشكل 2. رسم بياني يمثّل إيماءة يتم فيها تحريك المؤشر إلى اليسار

لفهم كيفية استخدام الفروق وتحويلها، راجِع الشكل 2 الذي يوضّح إيماءة يتم فيها تحريك المؤشر إلى اليمين.

  • ما قبل التمرير: تبدأ الإيماءة بفرق إدخال أولي موجب يبلغ 100.
    • تراقب Overscroll ذلك وتستهلك 10، ما يترك 90.
    • تمنح ميزة التمرير المسبق المتداخل المكوّن الرئيسي فرصة للتفاعل، ما يؤدي إلى استهلاك 30. يكون الفرق الأولي المتبقي 60.
  • التحويل A: قبل الدخول إلى مرحلة التمرير السريع، تعكس horizontalScroll دلتا الموجب المتبقي (60) إلى دلتا سالب (60-). يضمن ذلك تحرّك نافذة العرض إلى اليسار حتى يبدو أنّ المحتوى يتحرّك إلى اليمين مع إصبع المستخدم.
  • التمرير: يستهلك المكوّن المستهدف القابل للتمرير جزءًا من هذا التغيير المحوَّل لتعديل إزاحة التمرير. في هذا المثال، يتم استهلاك -30، ويبقى -30 غير مستهلك.
  • التحويل B: يتم تحويل فرق التمرير غير المستخدَم (-30) مرة أخرى إلى فرق أولي موجب (30) ليتوافق مع عقد التمرير المتداخل وتجاوز حد التمرير.
  • بعد التمرير: يتم تمرير دلتا البيانات الأولية المتبقية إلى أعلى مسار المعالجة.
    • يستهلك التمرير المتداخل بعد التمرير 10، ما يترك 20.
    • يستخدم تأثير التمرير الزائد آخر 20 لإنشاء تأثيرات بصرية على الحواف، مثل التمدّد أو التوهّج، مع حلّ كامل لفرق الإدخال إلى 0.

مرجع تحويل دلتا لإدخال المؤشر

يوضّح الجدول التالي كيفية توقيع دلتا الإدخال في المراحل المختلفة واتجاهات إدخال المؤشر.

الفرق في البيانات الأولية التي تم إدخالها تأثير تجاوز حد التمرير التمرير المتداخل scrollableArea بالاتجاه الأفقي scrollableArea باتجاه أفقي (معكوس) scrollableArea باتجاه عمودي scrollableArea باتجاه عمودي (معكوس)
تحرُّك المؤشر للأعلى سلبية سلبية سلبية لا ينطبق لا ينطبق إيجابية سلبية
تحرُّك المؤشر للأسفل إيجابية إيجابية إيجابية لا ينطبق لا ينطبق سلبية إيجابية
تحرُّك المؤشر لليسار سلبية سلبية سلبية موجب (سالب للغات التي تُكتب من اليمين إلى اليسار) سالب (موجب للغات التي تُكتب من اليمين إلى اليسار) لا ينطبق لا ينطبق
تحرُّك المؤشر إلى اليمين إيجابية إيجابية إيجابية سالب (موجب للغة التي تُكتب من اليمين إلى اليسار) موجب (سالب للغات التي تُكتب من اليمين إلى اليسار) لا ينطبق لا ينطبق