Interfejsy Geometry API umożliwiają tworzenie interaktywnych narzędzi, takich jak gumki i mechanizmy wyboru.
Aby zilustrować praktyczne zastosowanie interfejsów Geometry API, zapoznaj się z tym przykładem implementacji gumki.
Gumka do pełnej kreski
fun eraseWholeStrokes(
eraserBox: ImmutableBox,
finishedStrokesState: MutableState<Set<Stroke>>,
) {
val threshold = 0.1f
val strokesToErase = finishedStrokesState.value.filter { stroke ->
stroke.shape.computeCoverageIsGreaterThan(
box = eraserBox,
coverageThreshold = threshold,
)
}
if (strokesToErase.isNotEmpty()) {
Snapshot.withMutableSnapshot {
finishedStrokesState.value -= strokesToErase
}
}
}
W przypadku implementacji Compose pamiętaj, aby wywołać ponowne skompilowanie, aby zmiany zostały skutecznie usunięte. Można na przykład użyć atrybutu
rememberCoroutineScope
w funkcji kompozycyjnej i przekaż zakres współrzędny do funkcji
detektor dotyku, który umożliwia modyfikację elementu finishedStrokesState
w zakresie
z kompozycji.