图形库

  
利用多个 Android 平台版本中的图形工具。

此表列出了 androidx.graphics 组中的所有构件。

构件 稳定版 候选版 Beta 版 Alpha 版
graphics-core 1.0.2 - - -
graphics-path 1.0.1 - - -
graphics-shapes 1.0.1 - - -
此库上次更新于:2024 年 10 月 16 日

声明依赖项

要添加对图形库的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。

在您的应用或模块的 build.gradle 文件中添加所需构件的依赖项

Groovy

dependencies {
    implementation "androidx.graphics:graphics-core:1.0.2"
    implementation "androidx.graphics:graphics-path:1.0.1"
    implementation "androidx.graphics:graphics-shapes:1.0.1"
}

Kotlin

dependencies {
    implementation("androidx.graphics:graphics-core:1.0.2")
    implementation("androidx.graphics:graphics-path:1.0.1")
    implementation("androidx.graphics:graphics-shapes:1.0.1")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新的问题之前,请查看此库中现有问题。您可以通过单击星号按钮来为现有问题投票。

创建新的问题

有关更多信息,请参阅问题跟踪器文档

此构件没有发行说明。

图形形状 版本 1.0

版本 1.0.0

2024年8月21日

已发布 androidx.graphics:graphics-shapes:1.0.0androidx.graphics:graphics-shapes-android:1.0.0androidx.graphics:graphics-shapes-desktop:1.0.0。版本 1.0.0 包含 这些提交

版本 1.0.0-rc01

2024年7月24日

已发布 androidx.graphics:graphics-shapes:1.0.0-rc01androidx.graphics:graphics-shapes-android:1.0.0-rc01androidx.graphics:graphics-shapes-desktop:1.0.0-rc01。版本 1.0.0-rc01 包含 这些提交

版本 1.0.0-beta01

2024年5月1日

已发布 androidx.graphics:graphics-shapes:1.0.0-beta01androidx.graphics:graphics-shapes-android:1.0.0-beta01androidx.graphics:graphics-shapes-desktop:1.0.0-beta01。版本 1.0.0-beta01 包含 这些提交

API 变更

  • 允许预旋转形状以从不同的点开始。此更改允许 pillStar 形状从周长上的非默认点开始其曲线。当动画化形状路径的描边时,这可能很有用,以便从形状轮廓上的特定位置开始绘制。(Ifbb4db/324303807
  • 向 Morph 添加了 calculateBounds() 函数,与 RoundedPolygon 上的相同函数并行。(I8a3b6b/325463575

版本 1.0.0-alpha05

2024年2月7日

已发布 androidx.graphics:graphics-shapes:1.0.0-alpha05androidx.graphics:graphics-shapes-android:1.0.0-alpha05androidx.graphics:graphics-shapes-desktop:1.0.0-alpha05版本 1.0.0-alpha05 包含这些提交。

新功能

  • 该库现在提供新的 pill()pillStar() 函数,以便轻松创建这些圆角/星形形状。还有用于计算形状所需精确边界的新的 API(以前的边界只是基于底层贝塞尔曲线锚点和控制点的估计),以及最大可能的边界,如果形状将在该容器内旋转,这有助于确定容纳它的容器的大小。(I71827

API 变更

  • 现在有更多选项可用于检索精确边界和最大边界。(I6d49fb/317286450

错误修复

  • 将这些形状绘制为描边路径时,偶尔会出现渲染伪像,这是由于与零长度曲线相关的底层渲染问题导致的。通过消除所有零长度曲线(形状不需要这些曲线,因此还可以节省形状生成的路径的开销)来修复此错误。

版本 1.0.0-alpha04

2023年12月13日

已发布 androidx.graphics:graphics-shapes:1.0.0-alpha04androidx.graphics:graphics-shapes-android:1.0.0-alpha04androidx.graphics:graphics-shapes-desktop:1.0.0-alpha04版本 1.0.0-alpha04 包含这些提交。

新功能

  • 此版本包含多个 API 变更以及错误修复。
  • 许多 API 变更使 Shapes 库更易于与 KMP 兼容。这使得从非 Android 代码(例如与 Android 无关的 Compose 代码)调用更容易。例如,API 中没有 Android 类型,例如以前的 PointF、Matrix 和 Path 类型。
  • 出于性能原因,还对 API 和实现进行了一些更改,特别是为了最大限度地减少对象分配(和收集)。例如,从 PointF 转到单独的 Float 参数避免了分配许多临时 PointF 结构来保存这些顶点。

API 变更

  • Morph.asMutableCubics 替换为一个迭代 MutableCubics 的函数。更改了 PointTransformer 函数接口,现在它接受 Point 的 x 和 y 坐标并返回 TransformedResult(使用转换后的 x 和 y 坐标构造)。(I6719e)
  • 删除了公共 Cubic 构造函数并将其设置为工厂函数。(I409ce
  • 添加 Android 特定的转换和绘图 API (I079f6b/292289543)
  • 消除 Android 依赖项 (Iadc1cb/292289543)
  • 锚点和控制属性名称现在更清晰了 (If13bdb/294562941)
  • PointF 参数已更改为 Float 对 (Id4705b/276466399b/290254314)
  • progress 现在直接传递到 Morph 绘图命令 (Icdca2)

错误修复

版本 1.0.0-alpha03

2023年6月7日

已发布 androidx.graphics:graphics-shapes:1.0.0-alpha03版本 1.0.0-alpha03 包含这些提交。

API 变更

  • 添加了新的 RoundedPolygon.rectangle() 函数 (I78e7eb/280322189)
  • Star 和 Circle 函数现在已小写,并通过 RoundedPolygon 的伴生对象调用:例如,RoundedPolygon.star(...)(I14735)

错误修复

  • 修复了平滑处理中的错误 (Ibf894)
  • 修复了起始形状和结束形状相同时出现的错误。更好地分配侧面的可用空间以进行切割,首先使用可用空间进行圆角处理,然后如果有剩余空间则进行平滑处理。(Ibd320b/277936300

版本 1.0.0-alpha02

2023年4月19日

已发布 androidx.graphics:graphics-shapes:1.0.0-alpha02版本 1.0.0-alpha02 包含这些提交。

API 变更

  • Polygon 超类已与其子类 RoundedPolygon 合并;所有多边形现在都是(可选)圆角多边形。
  • Star 函数(之前仍然返回 RoundedPolygon)现在采用 innerRadius 值,而不是以前的 innerRadiusRatio 参数。这与现有半径参数的单位相同,使操作更简单且更一致。此外,numOuterVertices 参数已重命名为 numVerticesPerRadius,以阐明相同数字应用于内外半径。
  • CornerRounding.radius 以前在文档中被记录为相对于多边形的大小,但它实际上(也应该是)一个绝对值,而不是相对值。文档已更新,并且限制其最大值为 1.0 的注释已修复。

版本 1.0.0-alpha01

2023年4月5日

Graphics-Shapes 是一个新的库,它允许轻松创建和渲染圆角多边形形状,以及在不同形状之间进行简单且自动的变形(动画)。

已发布 androidx.graphics:graphics-shapes:1.0.0-alpha01。此版本是从内部分支发布的。

新功能

  • 使用 Polygon API 创建具有所需顶点数的规则多边形和星形多边形。
  • 使用可选的 CornerRounding 参数指定角的圆角半径和平滑参数,从而生成具有圆角的多边形形状。
  • 使用新的 Morph(Polygon, Polygon) API 自动计算“变形”形状,其进度可以设置为 0 到 1 以在起始形状和结束形状之间进行动画处理。随着时间的推移使该进度动画化,并在每一帧绘制结果,以在这新的圆角形状之间创建平滑动画。

图形路径 版本 1.0

版本 1.0.1

2024年5月1日

已发布 androidx.graphics:graphics-path:1.0.1。版本 1.0.1 包含 这些提交

错误修复

  • 编译器标志改进。

版本 1.0.0

2024年3月6日

已发布 androidx.graphics:graphics-path:1.0.0

版本 1.0.0-rc01

2024年2月21日

已发布 androidx.graphics:graphics-path:1.0.0-rc01版本 1.0.0-rc01 包含这些提交。

错误修复

  • 提高 API < 34 上 PathIterator 的性能 (Id4629)

版本 1.0.0-beta02

2024年1月10日

此版本中的更改都是关于减小库的大小,由于本机代码做出的假设,该库的大小大于必要的大小。

已发布 androidx.graphics:graphics-path:1.0.0-beta02版本 1.0.0-beta02 包含这些提交。

错误修复

  • libandroidx.graphics.path.so 的大小减少了 96%。(I71397)
  • libandroidx.graphics.path.so 的大小减少了 5%。(I2da7c)
  • androidx.graphics:graphics-path 的本机组件缩小了 43%。(I8e40d)

版本 1.0.0-beta01

2023年11月29日

已发布 androidx.graphics:graphics-path:1.0.0-beta01版本 1.0.0-beta01 包含这些提交。

API 变更

错误修复

  • 各种修复和性能改进,包括库处理二次曲线的 방식。

版本 1.0.0-alpha02

2023年6月7日

已发布 androidx.graphics:graphics-path:1.0.0-alpha02。此版本在内部分支中开发。

新功能

  • 修复了内部平台版本检查问题,该问题在 Android 14 预览版上运行时会导致问题(版本检查将失败,但在以前的版本上执行操作的机制在 Android 14 上尤其无法正常工作)。

版本 1.0.0-alpha01

2023年3月22日

已发布 androidx.graphics:graphics-path:1.0.0-alpha01版本 1.0.0-alpha01 包含这些提交。

新功能

  • 此新库允许通过新的 PathIterator API 查询 Path 数据。使用此 API,调用者可以迭代 Path 对象的所有段,以确定这些段的操作和数据。
  • 该库使用 Android 14 预览版中引入的类似 API,但此 AndroidX 版本的 API 也适用于 API 21 及更高版本。

图形核心 版本 1.0

版本 1.0.2

2024年10月16日

已发布 androidx.graphics:graphics-core:1.0.2 版本。1.0.2 版本包含这些提交

错误修复

  • 修复了即使在释放 SurfaceControl 实例后,系统合成器仍会管理它们的问题。
  • 修复了在释放低延迟依赖项后,不会释放当前呈现的 HardwareBuffer 实例的问题。
  • 修复了某些不支持前缓冲区使用标志的 Android 14+ 设备上的闪烁问题。

版本 1.0.1

2024年9月4日

已发布 androidx.graphics:graphics-core:1.0.1 版本。1.0.1 版本包含这些提交

错误修复

  • 修复了内存资源偶尔不会释放的问题。

版本 1.0.0

2024年5月29日

已发布 androidx.graphics:graphics-core:1.0.0 版本。1.0.0 版本包含这些提交

1.0.0 的主要功能

  • graphics-core 库的正式稳定版本。包含来自 1.0.0-rc01 的一些错误修复和性能改进。

版本 1.0.0-rc01

2024年4月17日

已发布 androidx.graphics:graphics-core:1.0.0-rc01 版本。此版本在内部分支中开发。

错误修复

  • 修复了在某些运行 Android 14 的 Android 设备上,使用 CanvasBufferedRendererAPI 时可能导致文件描述符双重关闭的问题。
  • 修复了 FrameBuffer 无法正确删除帧缓冲区实例的问题。

版本 1.0.0-beta01

2023年12月13日

已发布 androidx.graphics:graphics-core:1.0.0-beta01 版本。1.0.0-beta01 版本包含这些提交。

新功能

  • 引入了新的 LowLatencyCanvasView API,以支持在视图层次结构中使用 Android 的 2D 图形 API(Canvas + Paint)进行低延迟渲染。
  • 引入了 CanvasBufferedRenderer API,以支持将硬件加速的 Canvas 渲染到 HardwareBuffer。这可用于将用户界面的一部分绘制到缓冲区中,然后可以使用 Bitmap.wrapHardwareBuffer API 将其转换为 Bitmap。

API 变更

  • 更新了 CanvasBufferRenderer#releaseBuffer API,使其具有可选的 fence 参数。更新了文档,描述了何时返回 RenderResult#fence。(If1ea7a
  • RenderRequest 添加了 draw 方法,以支持利用协程来调度绘制请求。将先前使用执行程序的 draw 方法重命名为 drawAsync。将 isClosed() 方法重构为属性。(I5bff6e
  • 将缓冲区格式参数公开给 CanvasFrontBufferRenderer,以直接映射到 CanvasBufferedRenderer.Builder#setBufferFormatI0f272
  • 创建了 CanvasBufferedRenderer API 来处理将硬件加速的画布渲染到 HardwareBuffer。这提供了向 Android Q 的反向移植实现,以及 HardwareBuffers 交换链深度的配置。然而,ColorSpace 配置仍然仅限于 Android U,但兼容性实现为开发者提供了无操作行为。(I9b1d8
  • 为了控制帧率以及无缝或默认转换的更改策略,向 SurfaceControlCompat.Transaction 添加了 setFrameRate/clearFrameRate API。(I6045c
  • setDataSpace 的所需 API 级别从 Android T 降低到 Android Q。(I59c34
  • GLFrameBufferRenderer API 添加了 onBufferReleased 回调,以便使用者有机会在不再呈现缓冲区时清理状态(I8a4e2
  • 创建 LowLatencyCanvasView 以支持低延迟渲染内容的简单用例,该内容与视图层次结构渲染同步。这通过内部管理 SurfaceView 实例来减轻与 SurfaceView 管理相关的复杂性,该实例分别针对同步和低延迟渲染在屏幕上/屏幕外进行转换。(I9253b
  • CanvasFrontBufferedRenderer API 添加了颜色空间配置支持。更新了多缓冲回调,还包括后缓冲 SurfaceControlI24bd9

版本 1.0.0-alpha05

2023年9月6日

已发布 androidx.graphics:graphics-core:1.0.0-alpha05 版本。1.0.0-alpha05 版本包含这些提交。

新功能

  • 引入了 GLFrameBufferRenderer API。它提供了 OpenGL 依赖项、交换链配置、像素格式和 SurfaceControl 配置的组合。(Ic775b

API 变更

  • 向各种回调 API 添加了宽度和高度参数,以从 SurfaceHolder#Callbacks 传输尺寸。(I7f9fc
  • 添加了 clear API 以清除前缓冲区和多缓冲区层。(Ic1f95
  • 添加了对配置 GLFrontBufferedRenderer 中使用的交换链的底层缓冲区类型的支持。(I07a13
  • GLFrameBufferRenderer 添加了 Kotlin 属性作为 getter,为最大缓冲区条目添加了 IntRange 注解,并为 setFormat/setUsage 分别添加了 HardwareBufferFormartHardwareBufferUsage 注解。(Ief89e
  • 更新了 SurfaceControl 事务上的 setBuffer API,以提供释放 fence。(Ice1bb
  • 添加了 SurfaceControlCompat.Transaction API 来配置数据空间以及设置扩展亮度范围。(Ic378d

版本 1.0.0-alpha04

2023年6月7日

已发布 androidx.graphics:graphics-core:1.0.0-alpha04 版本。1.0.0-alpha04 版本包含这些提交。

新功能

  • 引入了 CanvasFrontBufferedRenderer 以支持利用 android.graphics.Canvas API 以及现有的 OpenGL 实现进行低延迟图形处理。

API 变更

  • 更新了 SurfaceControlCompat.Transaction#setBuffer API,以允许使用可为空的 HardwareBuffer 实例来镜像相应的平台 API(I173d7
  • 将引用双缓冲渲染的方法重命名为多缓冲,因为后台交换链可能包含两个以上的缓冲区。(I830d7
  • 创建 CanvasFrontBufferedRenderer API 使第三方能够使用 Canvas API 利用前缓冲渲染系统。(Ibfc29

错误修复

  • 修复了在恢复相应的 Activity 后 GLFrontBufferedRenderer 不会渲染内容的问题。
  • 修复了前缓冲区内容过早清除的问题。
  • 修复了在释放低延迟图形 API 后不会删除 SurfaceHolder.Callbacks 的问题。

版本 1.0.0-alpha03

2023年3月22日

已发布 androidx.graphics:graphics-core:1.0.0-alpha03 版本。1.0.0-alpha03 版本包含这些提交。

API 变更

  • 更新了 GLFrontBufferedRenderer 回调实现,以提供包含缓冲区宽度/高度以及帧缓冲区标识符的 BufferInfo 对象,该标识符可在渲染到中间临时缓冲区后用于重新定位原始目标。(I7fe20
  • SyncFence 创建合并到 SyncFenceCompat 上的静态工厂方法。
  • 删除了 eglDupNativeFenceFDANDROID 的公共兼容性方法,以支持 SyncFenceCompat 工厂方法创建 SyncFence。这是为了确保所有 API 表面都能接收到正确的 SyncFence 实现,而不管 API 级别如何。(I849bb
  • 添加了 FrameBufferRendererSyncStrategy 的文档。
    • FrameBufferRenderer + FrameBuffer + FrameBufferPool 移动到 androidx.graphics.opengl 包。
    • SyncStrategy 移动到 androidx.graphics.opengl 包。
    • 更新了 RenderCallback#onDraw 文档。
    • 更新了 RenderCallback#obtainFrameBuffer 的文档,指出 API 的实现者有责任调用 FrameBuffer.close
    • 更新了 onDrawComplete,指出使用者负责将内容调度到显示器。
    • SyncFence 兼容性接口/类移动到 androidx.hardware 包以镜像框架。
    • SyncFence API 重命名为 SyncFenceV19 并设为私有,以将用法合并到 SyncFenceCompat 中,该方法尽可能利用框架的 SyncFence API。(I5149c
  • 新增了GLFrontBufferedRenderer#cancelGLFrontBufferedRenderer#execute 方法。前者在笔触拒绝场景中很有用,在这种场景中,应取消对前缓冲区的渲染并隐藏前缓冲区。后者在无需调度渲染即可操作 GL 线程上的对象的情况下很有用。(If0b7f)
  • 添加了直接渲染到双缓冲层的 API。这有助于在恢复后重新渲染场景,并为使用者提供机会根据所需渲染的场景动态地选择何时利用前缓冲区渲染。(Ied56c)
  • SurfaceControlCompat.Builder 中添加了新的 API,除了现有的从SurfaceView 机制外,还支持从另一个SurfaceControl 实例配置父SurfaceControl。(I1d1b6)
  • 更多已弃用隐藏函数的返回类型可空性 (Ibf7b0)
  • 添加了EGL_ANDROID_get_native_client_buffer 扩展常量,用于查询 Android 设备是否支持将HardwareBuffer 实例导入到可作为EGLImage 实例使用的EGLClientBuffer 对象中。(Iad767)
  • 添加@JvmDefaultWithCompatibility 注解 (I8f206)

版本 1.0.0-alpha02

2022年11月9日

androidx.graphics:graphics-core:1.0.0-alpha02 已发布。 1.0.0-alpha02 版本包含这些提交。

API 变更

  • 修复了在 Android S 中引入的addTransactionCommitListener 缺少RequiresApi 注解的问题 (I0a035)
  • 更新了onDraw<Front/Double> 缓冲区回调,以提供使用者可以传递到其顶点着色器的变换矩阵以及当前缓冲区宽度/高度。使用者负责使用这些参数正确预旋转其 OpenGL 渲染代码。(I82f9e)

错误修复

  • 通过在发出SurfaceControl 事务之前预旋转缓冲区来提高图形延迟。
  • 修复了错误日志会显示错误 300d (EGL_BAD_SURFACE) 的问题。
  • 修复了在使用它的相应 Activity 恢复后GLFrontBufferedRenderer 会无效的问题。
  • 增加了对模拟器和 ChromeOS 设备的支持。
  • 修复了前缓冲区层可能过早隐藏的问题。

版本 1.0.0-alpha01

2022年10月24日

androidx.graphics:graphics-core:1.0.0-alpha01 已发布。 1.0.0-alpha01 版本包含这些提交。

新功能

  • 图形核心 AndroidX 库的初始版本。这包括支持低延迟用例(如触笔输入)的 API。这也引入了一些用于 OpenGL 用法的辅助 API。

API 变更

  • 引入了GLFrontBufferedRenderer 以帮助进行前缓冲和多缓冲渲染,以实现低延迟和高质量渲染输出。
  • 引入了GLRenderer API,以帮助各种 Surface 提供程序(如SurfaceViewTextureView 等)进行 OpenGL 渲染。