مدیریت ورودی‌های اشاره‌گر غیرمستقیم در Jetpack Compose Glimmer

دستگاه‌های XR واجدشرایط
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
عینک نمایشگردار

اصلاح‌کننده onIndirectPointerGesture به مؤلفه اجازه می‌دهد رویدادهای اشاره‌گر غیرمستقیم سطح بالا را دریافت کند و به آن‌ها پاسخ دهد، مانند رویدادهایی که از صفحه لمسی دستگاه منشأ می‌گیرند. از این اصلاح‌کننده برای ضبط و پردازش اشاره‌هایی که از صفحه لمسی یا منبع مشابهی می‌آیند استفاده کنید.

سطح میانای برنامه‌سازی کاربردی

چهار فراخوانی برگشتی وجود دارد که برنامه‌تان می‌تواند برای کنترل مدیریت استفاده کند:

  • ‫onClick: با تک‌ضرب یا کلیک موفقیت‌آمیز بدون حرکت افقی قابل‌توجه فعال می‌شود.
  • onSwipeForward: زمانی راه‌اندازی می‌شود که تند کشیدن افقی از آستانه فاصله و سرعت در جهت جلو فراتر رود.
  • onSwipeBackward: زمانی فعال می‌شود که تند کشیدن افقی از آستانه فاصله و سرعت در جهت عقب فراتر رود.
  • Enabled: وقتی روی false تنظیم شود، اصلاح‌کننده نادیده گرفته می‌شود و هیچ فراخوانی‌ای فراخوانده نمی‌شود.

رفتار سیستم برای تند کشیدن و پیمایش

سیستم از آستانه لغزش لمسی برای تشخیص تفاوت بین کلیک و تند کشیدن استفاده می‌کند.

  • اگر اشاره‌گر درحین وضعیت پایین به‌طور قابل‌توجهی حرکت کند، onClick لغو می‌شود.
  • اگر اشاره‌گر درطول حرکت به‌طور قابل‌توجهی به عقب برگردد، اشاره تند کشیدن نامعتبر می‌شود.

مثال: راه‌اندازی مدیریت تند کشیدن و کلیک کردن روی مؤلفه

کد زیر نحوه مدیریت تند کشیدن و کلیک کردن روی Box قابل‌تمرکز را تنظیم می‌کند:

@Composable
fun OnIndirectPointerGestureSample() {
    var lastGesture by remember { mutableStateOf("None") }

    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { lastGesture = "Forward" },
                    onSwipeBackward = { lastGesture = "Backward" },
                    onClick = { lastGesture = "Click" },
                )
                .focusTarget(),
        contentAlignment = Alignment.Center,
    ) {
        Text("Last Gesture: $lastGesture")
    }
}

نکات کلیدی درباره کد

  • ‫onIndirectPointerGesture به تمرکز نیاز دارد، بنابراین focusTarget نیز اعمال می‌شود تا Box قابل‌تمرکز شود. می‌توانید از focusTarget یا کلید تغییردهنده دیگری که فوکوس را فعال می‌کند، مثل surface، استفاده کنید. بدون تمرکز، اصلاح‌کننده نمی‌تواند روی رویدادهای اشاره‌گر غیرمستقیم عمل کند.
  • این مثال هم فراخوانی‌های onSwipeForward و هم onClick را پیاده‌سازی می‌کند، بنابراین اشاره‌های تند کشیدن و کلیک کردن که شناسایی می‌شوند، رهگیری و مصرف می‌شوند، و به بیرون به محفظه‌های والد نمی‌رسند. بااین‌حال، می‌توانید یک فراخوانی برگشتی خاص را null بگذارید تا اشاره‌ای را به یک اصلاح‌کننده onIndirectPointerGesture در محفظه ولی منتقل کنید.