Slide 27
Slide 27 text
ドラッグジェスチャーのハンドリング
:
状態更新編
ドラッグイベントを検知して状態更新を行う
//
タップやロングプレス、ドラッグなどのジェスチャーを処理するための比較的低水準なAPI
fun Modifier.pointerInput(key1: Any?, block: suspend PointerInputScope.() -> Unit): Modifier
//
長押しを検知、その後ドラッグイベント毎にonDrach
を呼び出す
suspend fun PointerInputScope.detectDragGesturesAfterLongPress(
onDragStart: (Offset) -> Unit = { },
onDragEnd: () -> Unit = { },
onDragCancel: () -> Unit = { },
onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
): Unit
//
実際の処理はstate
に委譲
detectDragGesturesAfterLongPress(
onDrag = { change, dragAmount ->
change.consume()
state.onDrag(dragAmount) //
メインのロジックはこの中に書かれる
},
onDragStart = state::onDragStart, //
指の位置からどの要素をタップしているかを取得する
onDragEnd = state::onDragInterrupted, //
状態の復元
onDragCancel = state::onDragInterrupted, //
状態の復元
)