Klikalny element canvas

0

Planując projekt nie chciałem ręcznie sprawdzać, bo byłem na uczelni i zapytałem chatGPT, czy można tak jak w HTML, JavaScript zrobić klikalne elementy svg. Dostałem odpowiedź, że tak. Przygotowałem dość zaawansowaną grafikę svg w Inkscape i podczas próby przeniesienia jej do Compose napotkałem problem. O ile udało mi się szybko napisać program, który konwertuje svg na elementy Path do Canvas, o tyle drawPath nie obsługuje clickable, ani on click. Czy istnieje inne podejście do wykonania tego zadania bądź jak matematycznie napisać hitboxy elementów na podstawie ścieżki SVG.

Dla jasności potrzebuje obrazku układu mięśniowego człowieka, tak by po kliknięciu wybranej partii mięśni ta zmieniła kolor.

0

Pewnie już rozwiazales ale możesz obrazek opakować w boxa?
Wtedy potencjalnie mógłbyś użyć na boxie

Modifier.clickable { onItemClick() }
0
Kerubyte napisał(a):

Pewnie już rozwiazales ale możesz obrazek opakować w boxa?
Wtedy potencjalnie mógłbyś użyć na boxie
Modifier.clickable { onItemClick() }

Wtedy cały obrazek będzie jednym elementem do klikania, a ja potrzebuję klikania na pojedyncze jego elementy. Na razie próbowałem kilku rozwiązań, ale były nieoptymalne, jak znajde rozwiązanie które dla mnie działa, to wstawię.

0

Żeby to działało na fragmencie obrazka to musisz to jakoś zdefiniować. Tzn określić który obszar ma być "klikalny" i wtedy zrobić obsługę tego
Ja do tego typu rozwiązania użyłem AsyncImage i potem

.pointerInput(Unit) {
        detectTapGestures(
         onTap = { tapOffset ->

Oczywiście pobierając poszczególne strony tzn "gazetki" pobieram też definicję tych obszarów. Definicja była pierwotnie zrobiona pod stronę WWW, więc jest tam plik html w którym jest definicja warstwy jako SVG. Oczywiście taką definicję można zrobić na wiele sposobów. W moim przypadku klient ma aplikację do definicji obszarów i przypisywanie towarów do obszarów - jako tło jpeg
Program generuje im pliki na WWW i z tych plików ja również pobieram definicję obszaru.

1 użytkowników online, w tym zalogowanych: 0, gości: 1