在 Android Jetpack Compose 中只要使用 Modifier.clickable 就可以很輕易的將內容增加點擊事件,並自動加上點擊動畫:
但是我想要處理點選、拖曳、放開的事件可以怎麼做?
使用 Modifier 的 pointerInput 就可以了!
在 onDragStart 中是取得絕對位置的座標,左上角的座標是 (0,0)
拖曳時會持續觸發 onDrag ,每次 onDrag 都是與上一次觸發 onDrag 的座標做比較,例如一直往右下拖曳時座標 x, y 都會是正的,水平往左拖曳時則 x 座標是負的,y 是 0
參考資料:
Android Developers - Understand gestures
@Composable
fun MyBox() {
Box(
modifier = Modifier
.background(Color.DarkGray)
.clickable {
Log.i("DragDetectComposable", "Clicked")
}
)
}
但是我想要處理點選、拖曳、放開的事件可以怎麼做?
使用 Modifier 的 pointerInput 就可以了!
@Composable
fun DragDetectComposable() {
Box(
modifier = Modifier
.background(Color.DarkGray)
.pointerInput(Unit) {
this.detectDragGestures(
onDragStart = { offset ->
// 當拖曳開始時觸發(按住時還不會)
Log.i("DragDetectComposable", "Drag started at ${offset.x}, ${offset.y}")
},
onDragEnd = {
// 當拖曳結束時觸發(放開)
Log.i("DragDetectComposable", "Drag ended")
},
onDragCancel = {
// 當拖曳被取消時觸發(例如從接近頂部往下滑動,系統將通知列展開)
Log.i("DragDetectComposable", "Drag cancelled")
},
onDrag = { change, dragAmount ->
// 在拖曳過程中不斷觸發
Log.i("DragDetectComposable", "Dragging ${dragAmount.x}, ${dragAmount.y}")
}
)
}
)
}
在 onDragStart 中是取得絕對位置的座標,左上角的座標是 (0,0)
拖曳時會持續觸發 onDrag ,每次 onDrag 都是與上一次觸發 onDrag 的座標做比較,例如一直往右下拖曳時座標 x, y 都會是正的,水平往左拖曳時則 x 座標是負的,y 是 0
參考資料:
Android Developers - Understand gestures
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com