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