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