モジュール

Ink API はモジュール化されているため、必要なものだけを使用できます。

ストローク

strokes モジュールは Ink API の基盤として機能します。このモジュールの主なデータ型は次のとおりです。

  • StrokeInputBatch: ポインタ入力の一連の動作を表します。位置、タイムスタンプ、必要に応じて圧力、傾き、向きを含みます。
  • InProgressStroke: 現在描画中のストロークを表します。InProgressStroke は、低レイテンシで部分的なストロークをレンダリングし、入力が完了したら最終的な Stroke を構築するために使用されます。その後、オブジェクトを再利用できます。InProgressStroke は、InProgressStrokes コンポーザブルによって使用されます。
  • Stroke: ジオメトリが固定された確定済みのストロークの不変表現。各 Stroke には、ImmutableStrokeInputBatch(入力ポイント)、Brush(スタイル)、PartitionedMesh(幾何学模様)があります。アプリケーション内でストロークを保存、操作、レンダリングできます。

ジオメトリ

Geometry モジュールは、プリミティブ シェイプ(BoxVec などの専用クラスを使用)と任意のシェイプ(PartitionedMesh を使用)に対する幾何学的演算をサポートしています。これには、交差検出と変換が含まれます。PartitionedMesh は、レンダリングをサポートするための追加データを保持することもできます。

ブラシ

brush モジュールはストロークのスタイルを定義します。主に次の 2 つの部分で構成されています。

  • Brush: ベースカラー、ベースサイズ、BrushFamily など、ストロークのスタイルを指定します。BrushFamily はフォント ファミリーに似ており、ストロークのスタイルを定義します。たとえば、BrushFamily は特定のスタイルのマーカーやハイライトを表すことができ、サイズや色の異なるストロークがそのスタイルを共有できます。
  • StockBrushes: すぐに使用できる BrushFamily インスタンスを作成するためのファクトリ関数を提供します。

オーサリング

Compose のオーサリング モジュールを使用すると、ユーザーのタッチ入力をキャプチャして、画面上に低レイテンシのストロークとしてリアルタイムでレンダリングできます。これは、モーション イベントを処理し、ストロークが描画されると同時に表示するコンポーザブル InProgressStrokes によって実現されます。

ストロークが完了すると、コンポーザブルは InProgressStrokesFinishedListener コールバックを使用してクライアント アプリケーションに通知します。これにより、アプリケーションはレンダリングまたは保存のために完了したストロークを取得できます。

Compose では、InProgressStrokesonStrokesFinished パラメータでこのコールバックを受け取ります。完成したストロークを別のコンポーザブルに渡し、レンダリング モジュールを使用して画面にコミットします。

レンダリング

レンダリング モジュールを使用すると、Android の Canvas にインク ストロークを簡単に描画できます。Compose 用の CanvasStrokeRenderer と、ビューベースのレイアウト用の ViewStrokeRenderer が用意されています。これらのレンダラは、レンダリング パフォーマンスを最適化し、アンチエイリアシングなどの高品質のビジュアルを提供します。

ストロークをレンダリングするには、create() メソッドを呼び出して CanvasStrokeRenderer インスタンスを取得し、draw() メソッドを呼び出して、完了した(Stroke)ストロークまたは進行中の(InProgressStroke)ストロークを Canvas にレンダリングします。

ストロークを描画するときに、キャンバスを変換できます。たとえば、パン、ズーム、回転などがあります。ストロークを正しくレンダリングするには、canvas 変換を CanvasStrokeRenderer.draw に渡す必要もあります。

canvas 変換を個別にトラッキングしないようにするには、代わりに ViewStrokeRenderer を使用します。

ストレージ

ストレージ モジュールは、ストローク データを効率的にシリアル化および逆シリアル化するためのユーティリティを提供します。主に StrokeInputBatch に重点を置いています。

このモジュールは、プロトコル バッファと最適化されたデルタ圧縮技術を使用しているため、単純な方法と比較してストレージを大幅に節約できます。

ストレージ モジュールを使用すると、ストロークの保存、読み込み、共有が簡単になります。