Moduły

Interfejs Ink API jest modułowy, więc możesz używać tylko tego, czego potrzebujesz.

Pociągnięcia

Moduł Strokes stanowi podstawę biblioteki Ink, oferując podstawowy interfejs API i zawierając podstawowe typy danych do interakcji z biblioteką. Najważniejsze typy danych w tym module:

  • StrokeInputBatch: reprezentuje serię danych wejściowych wskaźnika, obejmujących pozycję, sygnaturę czasową i opcjonalnie nacisk, pochylenie oraz orientację. Tych danych można używać – Stroke lub InProgressStroke klas i jest typem, który dostarcza dane wejściowe dla pisma odręcznego do biblioteki rozpoznawania.
  • Stroke: wartość stała ostatecznego ruchu o stałej geometrii. Obrys składa się z ImmutableStrokeInputBatch (punktów wejścia), Brush (stylizacji) i PartitionedMesh (kształtu geometrycznego). Ciągi można przechowywać, edytować i renderować w obrębie Twojej aplikacji.
  • InProgressStroke: Zmiennego odpowiednika funkcji Stroke – zaprojektowane z myślą przyrostowa obsługa danych wejściowych i renderowanie w czasie rzeczywistym podczas rysowania proces tworzenia konta. Chociaż często jest używany pośrednio za pomocą InProgressStrokesView, InProgressStrokemożna go wykorzystywać bezpośrednio do zaawansowanej personalizacji.

Geometria

Moduł Geometria udostępnia pakiet podstawowych elementów geometrycznych dla zarówno podstawowych, jak i złożonych kształtów wraz z operacjami wykrywania skrzyżowań i przekształceń. Te podstawowe elementy płynnie integrują się z metodami Ink, pozwalając takie jak gumki z pełnym kreską i narzędzia do zaznaczania.

Zajęcia takie jak Box i Vec głównie ułatwiają operacje geometryczne, PartitionedMesh może a także dane związane z renderowaniem.

Pędzel

Moduł Pędzel działa jako deklaratywna konfiguracja tworzenia i renderowania kreski, działają podobnie do czcionki tekstu. O Brush obiekt ma tych właściwości:

  • Kolor: może być jednolitym kolorem lub podstawą dla efektów i tekstur nałożonych na siebie.
  • Rozmiar: może być stały lub służyć jako podstawa do dynamicznych dostosowań rozmiaru.
  • Rodzina: podobnie jak w przypadku czcionek tekstowych, rodzina określa ogólny styl obrysu.
  • Epsilon: określa poziom szczegółowości geometrii wektorowej obrysu, reprezentując najmniejszą jednostkę wizualnej różnicy.

Właściwość epsilon odgrywa kluczową rolę w określaniu dokładności systemu współrzędnych. Więcej wskazówek znajdziesz w sekcji Interfejsy Brush API, aby dowiedzieć się, aby wybrać odpowiednią wartość ypsilon.

BrushFamily pełni funkcję wydajną konfigurację do tworzenia ekspresyjnych pociągnięć bez zagłębiania się w ze złożoną geometrią czy kodem renderowania. Biblioteka zawiera zestaw wstępnie zdefiniowanych StockBrushes, w tym pióro, zakreślacz i marker z czułością na nacisk.

Tworzenie

Authoring pozwala programistom rejestrować dotykowe dane wejściowe użytkownika i renderować je jako w czasie rzeczywistym i z małym opóźnieniem. Jest to możliwe dzięki InProgressStrokesView zajęcia, który przetwarza zdarzenia ruchu i wizualizuje pociągnięcia w miarę ich rysowania.

Po zakończeniu kreski moduł powiadamia aplikację kliencką za pomocą onStrokesFinished() wywołanie zwrotne InProgressStrokesFinishedListener Wywołanie zwrotne umożliwia aplikacji pobranie i zakończenia danych kreski do renderowania lub zapisywania.

Renderowanie

Moduł renderowania upraszcza proces rysowania pociągnięcia atramentu na urządzeniu z Androidem Canvas. Moduł ten zapewnia CanvasStrokeRenderer w przypadku kompozycji oraz ViewStrokeRenderer w przypadku układów opartych na widoku. Oba te tryby optymalizują wydajność renderowania i zapewniają wysoką jakość wizualizacji, w tym wygładzanie krawędzi.

Aby renderować ścieżki na płótnie, pobierz instancję CanvasStrokeRenderer za pomocą metody create(). Następnie użyj metody draw(), aby renderować na płótnie gotowe lub w trakcie tworzenia pociągnięcia.

Obszar roboczy można przekształcać (przesuwać, powiększać lub obracać) w ramach rysowania aby kreska wygląda jak najlepiej, przekształcenie zastosowane do obszaru roboczego musi również zostać przekazane do CanvasStrokeRenderer#draw() Aby uniknąć konieczności śledzenia ich oddzielnie, użyj funkcji ViewStrokeRenderer .