Ink API はモジュール化されているため、必要なものだけを使用できます。
ストローク
strokes モジュールは Ink API の基盤として機能します。このモジュールの主なデータ型は次のとおりです。
StrokeInputBatch: ポインタ入力の一連の動作を表します。位置、タイムスタンプ、必要に応じて圧力、傾き、向きを含みます。InProgressStroke: 現在描画中のストロークを表します。InProgressStrokeは、低レイテンシで部分的なストロークをレンダリングし、入力が完了したら最終的なStrokeを構築するために使用されます。その後、オブジェクトを再利用できます。InProgressStrokeは、InProgressStrokesコンポーザブルによって使用されます。Stroke: ジオメトリが固定された確定済みのストロークの不変表現。各Strokeには、ImmutableStrokeInputBatch(入力ポイント)、Brush(スタイル)、PartitionedMesh(幾何学模様)があります。アプリケーション内でストロークを保存、操作、レンダリングできます。
ジオメトリ
Geometry モジュールは、プリミティブ シェイプ(Box や Vec などの専用クラスを使用)と任意のシェイプ(PartitionedMesh を使用)に対する幾何学的演算をサポートしています。これには、交差検出と変換が含まれます。PartitionedMesh は、レンダリングをサポートするための追加データを保持することもできます。
ブラシ
brush モジュールはストロークのスタイルを定義します。主に次の 2 つの部分で構成されています。
Brush: ベースカラー、ベースサイズ、BrushFamilyなど、ストロークのスタイルを指定します。BrushFamilyはフォント ファミリーに似ており、ストロークのスタイルを定義します。たとえば、BrushFamilyは特定のスタイルのマーカーやハイライトを表すことができ、サイズや色の異なるストロークがそのスタイルを共有できます。StockBrushes: すぐに使用できるBrushFamilyインスタンスを作成するためのファクトリ関数を提供します。
オーサリング
Compose のオーサリング モジュールを使用すると、ユーザーのタッチ入力をキャプチャして、画面上に低レイテンシのストロークとしてリアルタイムでレンダリングできます。これは、モーション イベントを処理し、ストロークが描画されると同時に表示するコンポーザブル InProgressStrokes によって実現されます。
ストロークが完了すると、コンポーザブルは InProgressStrokesFinishedListener コールバックを使用してクライアント アプリケーションに通知します。これにより、アプリケーションはレンダリングまたは保存のために完了したストロークを取得できます。
Compose では、InProgressStrokes は onStrokesFinished パラメータでこのコールバックを受け取ります。完成したストロークを別のコンポーザブルに渡し、レンダリング モジュールを使用して画面にコミットします。
レンダリング
レンダリング モジュールを使用すると、Android の Canvas にインク ストロークを簡単に描画できます。Compose 用の CanvasStrokeRenderer と、ビューベースのレイアウト用の ViewStrokeRenderer が用意されています。これらのレンダラは、レンダリング パフォーマンスを最適化し、アンチエイリアシングなどの高品質のビジュアルを提供します。
ストロークをレンダリングするには、create() メソッドを呼び出して CanvasStrokeRenderer インスタンスを取得し、draw() メソッドを呼び出して、完了した(Stroke)ストロークまたは進行中の(InProgressStroke)ストロークを Canvas にレンダリングします。
ストロークを描画するときに、キャンバスを変換できます。たとえば、パン、ズーム、回転などがあります。ストロークを正しくレンダリングするには、canvas 変換を CanvasStrokeRenderer.draw に渡す必要もあります。
canvas 変換を個別にトラッキングしないようにするには、代わりに ViewStrokeRenderer を使用します。
ストレージ
ストレージ モジュールは、ストローク データを効率的にシリアル化および逆シリアル化するためのユーティリティを提供します。主に StrokeInputBatch に重点を置いています。
このモジュールは、プロトコル バッファと最適化されたデルタ圧縮技術を使用しているため、単純な方法と比較してストレージを大幅に節約できます。
ストレージ モジュールを使用すると、ストロークの保存、読み込み、共有が簡単になります。