Ink API 采用模块化设计,因此你可以只使用所需的部分。
笔画
Strokes 模块是 Ink 库的基础,提供了主要的 API 接口,并包含与库交互的核心数据类型。此模块中的主要数据类型包括
StrokeInputBatch
:表示一系列指针输入,包括位置、时间戳以及可选的压力、倾斜度和方向。此数据可与Stroke
或InProgressStroke
类一起使用,并且是为手写识别库提供输入的数据类型。Stroke
:固定几何形状的最终笔画的不可变表示。Stroke 包括ImmutableStrokeInputBatch
(输入点)、Brush
(样式)和PartitionedMesh
(几何形状)。笔画可以在应用内存储、操作和渲染。InProgressStroke
:是Stroke
的可变对应物,专为在绘制过程中处理增量输入和实时渲染而设计。虽然通常通过InProgressStrokesView
间接使用,但InProgressStroke
可直接用于高级自定义。
几何体
Geometry 模块提供了一套几何图元,用于基本和复杂的形状,以及交集检测和转换操作。这些图元与 Ink 笔画无缝集成,使你能够构建诸如全笔画橡皮擦和选框工具等功能。
虽然 Box
和 Vec
等类主要用于几何操作,但 PartitionedMesh
也可能包含特定于渲染的数据。
画笔
Brush 模块充当笔画创建和渲染的声明式配置,其功能类似于文本字体。Brush
对象具有以下属性
- 颜色:可以是纯色,也可以是分层效果和纹理的基础。
- 大小:可以是固定的,也可以作为动态大小调整的基础。
- 族:类似于文本字体,族定义了笔画的整体样式。
- Epsilon:控制笔画矢量几何体的细节级别,表示最小的可视区分单位。
epsilon
属性在定义坐标系统的精度方面起着至关重要的作用。有关如何选择适当的 epsilon 值的更多指导,请参阅画笔 API 部分。
BrushFamily
是用于创建富有表现力的笔画而无需深入复杂的几何体或渲染代码的强大配置。该库提供了一组预定义的 StockBrushes
,包括压感笔、荧光笔和标记笔。
创作
Authoring
模块使开发者能够捕获用户触摸输入并将其作为低延迟笔画实时渲染到屏幕上。这通过 InProgressStrokesView
类实现,该类处理运动事件并可视化绘制中的笔画。
笔画完成后,该模块使用 InProgressStrokesFinishedListener
的 onStrokesFinished()
回调通知客户端应用。回调允许应用检索完成的笔画数据以进行渲染或存储。
渲染
Rendering 模块简化了在 Android Canvas
上绘制墨迹笔画的过程。该模块提供了适用于 Compose 的 CanvasStrokeRenderer
和适用于基于视图的布局的 ViewStrokeRenderer
,两者都优化了渲染性能并确保高质量的视觉效果,包括抗锯齿。
要将笔画渲染到画布上,请使用 create()
方法获取 CanvasStrokeRenderer
实例。然后,使用 draw()
方法将已完成或正在进行的笔画渲染到画布上。
画布可以在绘制笔画时进行变换(平移、缩放或旋转),但为了确保笔画在屏幕上的绘制效果最佳,应用于画布的变换也必须传递给 CanvasStrokeRenderer#draw()
。为了避免单独跟踪此信息,请改用 ViewStrokeRenderer
。