Módulos

A API Ink é modularizada, então você pode usar apenas o que precisa.

Braçadas

O módulo strokes serve como base para a API Ink. Os principais tipos de dados neste módulo são:

  • StrokeInputBatch: representa uma série de entradas de ponteiro, incluindo posição, carimbo de data/hora e, opcionalmente, pressão, inclinação e orientação.
  • InProgressStroke: Representa um traço que está sendo desenhado ativamente. O InProgressStroke é usado para renderizar traços parciais com baixa latência e para criar o Stroke final quando a entrada é concluída. Depois disso, o objeto pode ser reutilizado. `InProgressStroke é usado por InProgressStrokesView.
  • Stroke: uma representação imutável de um traço finalizado com geometria fixa. Cada Stroke tem um ImmutableStrokeInputBatch (pontos de entrada), um Brush (estilo) e uma PartitionedMesh (forma geométrica). É possível armazenar, manipular e renderizar traços no aplicativo.

Geometria

O módulo Geometry oferece suporte a operações geométricas em formas primitivas (usando classes dedicadas como Box e Vec), além de formas arbitrárias (usando PartitionedMesh), incluindo detecção e transformação de interseção. O PartitionedMesh também pode conter dados extras para oferecer suporte à renderização.

Brush

O módulo brush define o estilo dos traços. Ela é composta por duas partes principais:

  • Brush: especifica o estilo de um traço, incluindo cor base, tamanho base e BrushFamily. BrushFamily é análogo a uma família de fontes, definindo o estilo de um traço. Por exemplo, um BrushFamily pode representar um estilo específico de marcador ou destaque, permitindo que traços com tamanhos e cores diferentes compartilhem esse estilo.
  • StockBrushes: fornece funções de fábrica para criar instâncias BrushFamily prontas para uso.

Criação

O módulo Criação permite capturar a entrada do ponteiro do usuário e renderizá-la como traços de baixa latência na tela em tempo real. Ele fornece uma InProgressStrokesView, que processa eventos de movimento e mostra os traços conforme eles são desenhados.

Quando um traço é concluído, a visualização notifica o aplicativo cliente por meio de um callback registrado (InProgressStrokesFinishedListener). O callback permite que o aplicativo recupere o traço finalizado para renderização ou armazenamento.

Renderização

O módulo Rendering ajuda a desenhar traços de tinta em um Canvas do Android. Ele fornece CanvasStrokeRenderer para o Compose e ViewStrokeRenderer para layouts baseados em visualizações. Esses renderizadores são projetados para renderização de alta performance e ajudam a oferecer recursos visuais de alta qualidade, incluindo antialiasing.

Para renderizar traços, chame o método create() para receber uma instância de CanvasStrokeRenderer. Em seguida, chame o método draw() para renderizar traços concluídos (Stroke) ou em andamento (InProgressStroke) em um Canvas.

É possível transformar a tela ao desenhar um traço. Exemplos incluem panorâmica, zoom e rotação. Para renderizar o traço corretamente, também é necessário transmitir a transformação canvas para CanvasStrokeRenderer.draw.

Para evitar o rastreamento da transformação canvas separadamente, use ViewStrokeRenderer.

Armazenamento

O módulo storage fornece utilitários para serializar e desserializar dados de traços de maneira eficiente, principalmente com foco em StrokeInputBatch.

O módulo usa buffers de protocolo e técnicas otimizadas de compactação delta, resultando em uma economia significativa de armazenamento em comparação com métodos simples.

O módulo de armazenamento simplifica o salvamento, o carregamento e o compartilhamento de traços.