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
,两者都能优化渲染性能并确保高质量的视觉效果,包括抗锯齿。
要将笔画渲染到 canvas,请使用 create()
方法获取 CanvasStrokeRenderer
实例。然后,使用 draw()
方法将完成或进行中的笔画渲染到 canvas 上。
canvas 可以在绘制笔画时进行变换(平移、缩放或旋转),但为了确保笔画在屏幕上绘制时达到最佳效果,应用于 canvas 的变换也必须传递给 CanvasStrokeRenderer#draw()
。为了避免单独跟踪此信息,请改为使用 ViewStrokeRenderer
。