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

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

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

سطح API

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

  • 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 استفاده کنید. بدون focus، اصلاح‌کننده نمی‌تواند روی رویدادهای اشاره‌گر غیرمستقیم عمل کند.
  • این مثال هر دو فراخوانی onSwipeForward و onClick را پیاده‌سازی می‌کند، بنابراین حرکات کشیدن و کلیک که شناسایی می‌شوند، رهگیری و مصرف می‌شوند و به کانتینرهای والد نمی‌رسند. با این حال، می‌توانید یک فراخوانی خاص را null بگذارید تا از طریق یک حرکت به یک اصلاح‌کننده onIndirectPointerGesture در کانتینر والد منتقل شود.