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.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Geometry APIs\n\nThe Geometry APIs allow you to create interactive tools such as erasers and\nselection mechanisms.\n\nTo illustrate practical application of the Geometry APIs, explore the following\neraser implementation example.\n\n### Whole stroke eraser\n\n fun eraseWholeStrokes(\n eraserBox: ImmutableBox,\n finishedStrokesState: MutableState\u003cSet\u003cStroke\u003e\u003e,\n ) {\n val threshold = 0.1f\n\n val strokesToErase = finishedStrokesState.value.filter { stroke -\u003e\n stroke.shape.computeCoverageIsGreaterThan(\n box = eraserBox,\n coverageThreshold = threshold,\n )\n }\n if (strokesToErase.isNotEmpty()) {\n Snapshot.withMutableSnapshot {\n finishedStrokesState.value -= strokesToErase\n }\n }\n }\n\nFor a Compose implementation, make sure to trigger a recomposition, so the\nstrokes are effectively removed. For example, an approach would be to use\n`rememberCoroutineScope` in your composable and pass the coroutine scope to your\ntouch listener, allowing you to modify `finishedStrokesState` within the scope\nof Compose.\n| **Note:** An eraser that only removes the parts of the strokes it touches can be implemented by seeing if a stroke intersects with individual line segments of a [`StrokeInputBatch`](/reference/kotlin/androidx/ink/strokes/StrokeInputBatch) and creating new [`StrokeInputBatch`](/reference/kotlin/androidx/ink/strokes/StrokeInputBatch) and [`Stroke`](/reference/kotlin/androidx/ink/strokes/Stroke) objects out of the line segments that aren't intersected."]]