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