التعامل مع إدخالات المؤشر غير المباشرة في Jetpack Compose Glimmer

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
نظارات الصوت
والعرض

يتيح المعدِّل onIndirectPointerGesture للمكوّن تلقّي أحداث المؤشر غير المباشرة ذات المستوى العالي والاستجابة لها، مثل تلك التي تنشأ من لوحة اللمس في الجهاز. استخدِم هذا المعدِّل لتسجيل ومعالجة الإيماءات الواردة من لوحة اللمس أو مصدر مشابه.

مساحة عرض واجهة برمجة التطبيقات

هناك أربع دوال ردّ يمكن أن يستخدمها تطبيقك للتحكّم في المعالجة:

  • onClick: يتم تشغيل هذا الحدث عند النقر أو الضغط بنجاح بدون تحريك الإصبع بشكل كبير أفقيًا.
  • onSwipeForward: يتم تشغيله عندما يتجاوز التمرير السريع أفقيًا الحد الأدنى للمسافة والسرعة في الاتجاه الأمامي.
  • onSwipeBackward: يتم تشغيل هذا الإجراء عندما يتجاوز التمرير السريع أفقيًا الحد الأدنى للمسافة والسرعة في الاتجاه الخلفي.
  • Enabled: عند ضبط القيمة على false، يتم تجاهل المعدِّل ولا يتم استدعاء أي عمليات إعادة استدعاء.

سلوك النظام عند التمرير سريعًا والتنقّل في الشاشة

يستخدم النظام حدًا أدنى للمسافة التي يجب أن تقطعها إصبعك على الشاشة للتمييز بين النقرة والتمرير السريع.

  • إذا تحرّك المؤشر بشكل كبير أثناء حالة الضغط، سيتم إلغاء onClick.
  • إذا تراجع المؤشر بشكل كبير أثناء الحركة، سيتم إبطال إيماءة التمرير السريع.

مثال: إعداد معالجة عمليات التمرير السريع والنقرات على أحد المكوّنات

يُعدِّل الرمز التالي إعدادات التعامل مع التمريرات السريعة والنقرات على عنصر Box قابل للتركيز:

@Composable
@Sampled
fun OnIndirectPointerGestureSample() {
    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { /* onSwipeForward */ },
                    onSwipeBackward = { /* onSwipeBackward */ },
                    onClick = { /* onClick */ },
                )
                .focusTarget()
    ) {
        // App()
    }
}

النقاط الرئيسية حول الرمز

  • يتطلّب العنصر onIndirectPointerGesture التركيز، لذا يتم تطبيق focusTarget أيضًا لجعل العنصر Box قابلاً للتركيز. يمكنك استخدام focusTarget أو معدِّل آخر يتيح التركيز، مثل surface. بدون التركيز، لا يمكن للمعدِّل التأثير في أحداث المؤشر غير المباشرة.
  • يُنفِّذ هذا المثال كلّاً من معاودة الاتصال onSwipeForward وonClick، وبالتالي يتم اعتراض الإيماءات التي يتم رصدها، مثل التمرير السريع والنقر، واستهلاكها، ولا تصل إلى الحاويات الرئيسية. ومع ذلك، يمكنك أيضًا ترك دالة ردّ نداء معيّنة فارغة لتمرير إيماءة إلى أداة تعديل onIndirectPointerGesture في حاوية رئيسية. -