Moduli

L'API Ink è modularizzata, quindi puoi utilizzare solo ciò che ti serve.

Tratti

Il modulo Strokes costituisce la base della libreria Ink, in quanto offre l'interfaccia API principale e contiene i tipi di dati di base per interagire con la libreria. I principali tipi di dati all'interno di questo modulo includono:

  • StrokeInputBatch: rappresenta una serie di input del cursore, che include posizione, timestamp e, facoltativamente, pressione, inclinazione e orientamento. Questi dati possono essere utilizzati con le classi Stroke o InProgressStroke e sono del tipo che fornisce gli input per una libreria di riconoscimento della scrittura a mano.
  • Stroke: una rappresentazione immutabile di un tratto finalizzato con geometria fissa. La traccia è composta da un ImmutableStrokeInputBatch (punti di input), un Brush (stile) e un PartitionedMesh (forma geometrica). I tratti possono essere archiviati, manipolati e visualizzati al suo interno la tua applicazione.
  • InProgressStroke: una controparte mutabile di Stroke progettata per la gestione incrementale dell'input e il rendering in tempo reale durante il processo di disegno. Sebbene spesso utilizzato indirettamente tramite InProgressStrokesView, InProgressStroke può essere utilizzato direttamente per la personalizzazione avanzata.

Geometria

Il modulo Geometry fornisce una serie di primitive geometriche per le risorse di base e complesse forme insieme alle operazioni per il rilevamento delle intersezioni e le trasformazioni. Queste primitive si integrano perfettamente con i tratti di inchiostro, consentendoti di creare funzionalità come gomme da cancellare per l'intero tratto e strumenti di selezione con selezione rettangolare.

Mentre corsi come Box e Vec facilitano principalmente operazioni geometriche, PartitionedMesh può includono anche dati specifici del rendering.

Pennello

Il modulo Pennello funge da configurazione dichiarativa per la creazione e il rendering di tratti, funzionando in modo simile a un carattere di testo. R Brush ha seguenti proprietà:

  • Colore: può essere un colore a tinta unita o come base per effetti stratificati e texture.
  • Dimensioni: può essere fisso o fungere da base per gli aggiustamenti dinamici delle dimensioni.
  • Famiglia. In modo analogo a un carattere tipografico di testo, la famiglia definisce l'insieme del tratto lo stile del testo.
  • Epsilon: controlla il livello di dettaglio nella geometria vettoriale del tratto. che rappresentano la più piccola unità di distinzione visiva.

La proprietà epsilon svolge un ruolo fondamentale per definire la precisione del sistema di coordinate. Nella sezione API Brush sono fornite ulteriori indicazioni su come scegliere un valore epsilon appropriato.

La BrushFamily funge da una potente configurazione per creare tratti espressivi senza dover approfondire a geometria complessa o codice di rendering. La raccolta fornisce un insieme di StockBrushes predefiniti, tra cui una penna, un evidenziatore e un pennarello sensibili alla pressione.

Authoring

La Authoring consente agli sviluppatori di acquisire l'input tocco dell'utente e di eseguirne il rendering tratti a bassa latenza sullo schermo in tempo reale. Questo viene ottenuto tramite la classe InProgressStrokesView, che elabora gli eventi di movimento e visualizza i tratti man mano che vengono disegnati.

Una volta completato un tratto, il modulo invia una notifica all'applicazione client utilizzando il callback onStrokesFinished() di InProgressStrokesFinishedListener. Il callback consente all'applicazione di recuperare i dati del tratto finito per il rendering o la memorizzazione.

Rendering

Il modulo Rendering semplifica il processo di disegno di pennellate di inchiostro su una Android Canvas Il modulo fornisce un CanvasStrokeRenderer per Compose e un ViewStrokeRenderer per i layout basati sulle visualizzazioni, che ottimizzano entrambi le prestazioni di rendering e garantiscono immagini di alta qualità, incluso l'anti-aliasing.

Per eseguire il rendering dei tratti in un canvas, ottieni uno CanvasStrokeRenderer utilizzando create() . Poi utilizza draw() per eseguire il rendering di tratti completati o in corso. tratto su una tela.

La tela può essere trasformata (pan, zoom o rotazione) durante il disegno del tratto, ma per assicurarti che il tratto sia visualizzato al meglio sullo schermo, la trasformazione applicata alla tela deve essere passata anche a CanvasStrokeRenderer#draw(). Per evitare di doverle tenere traccia separatamente, usa ViewStrokeRenderer .