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