onIndirectPointerGesture 修飾符可讓元件接收及回應高階間接指標事件,例如源自裝置觸控板的事件。使用這個修飾符,可擷取及處理來自觸控板或類似來源的手勢。
API 介面
應用程式可以使用四種回呼來控制處理方式:
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修飾符。