onIndirectPointerGesture 修飾子は、デバイスのタッチパッドから発生するような、高レベルの間接ポインタ イベントをコンポーネントが受け取って応答できるようにします。この修飾子を使用して、タッチパッドなどのソースからのジェスチャーをキャプチャして処理します。
API サーフェス
アプリで処理を制御するために使用できるコールバックは 4 つあります。
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などの別のフォーカス有効化修飾子を使用できます。フォーカスがない場合、修飾子は間接的なポインタ イベントに対して動作できません。- この例では
onSwipeForwardコールバックとonClickコールバックの両方を実装しているため、検出されたスワイプ ジェスチャーとクリック ジェスチャーはインターセプトされて消費され、親コンテナに伝播されません。ただし、特定のコールバックを null にして、ジェスチャーを親コンテナのonIndirectPointerGesture修飾子に渡すこともできます。-