دستگاههای 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اصلاحکننده در یک محتوی والد منتقل شود.