图形

  
跨多个 Android 平台版本利用图形功能

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

Artifact 稳定版 发布候选版本 Beta 版 Alpha 版
graphics-core 1.0.3 - - -
graphics-path 1.0.1 - - -
graphics-shapes 1.0.1 - - 1.1.0-alpha01
此库最近更新时间:2025 年 3 月 26 日

声明依赖项

要添加对 Graphics 的依赖项,您必须将 Google Maven 存储库添加到您的项目。阅读Google 的 Maven 存储库以获取更多信息。

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

Groovy

dependencies {
    implementation "androidx.graphics:graphics-core:1.0.3"
    implementation "androidx.graphics:graphics-path:1.0.1"
    implementation "androidx.graphics:graphics-shapes:1.1.0-alpha01"
}

Kotlin

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

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

反馈

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

创建新问题

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

此 artifact 没有发布说明。

Graphics 版本 1.1

版本 1.1.0-alpha01

2024 年 12 月 11 日

androidx.graphics:graphics-*:1.1.0-alpha01 发布。版本 1.1.0-alpha01 包含这些提交

新功能

  • 将主要演示重构为一个通用形状编辑器。这允许您从 svg 路径导入形状,手动编辑自动处理中遗漏的检测到的特征,并将结果导出为可在生产代码中使用的代码。(I1ac13)
  • 将形状轮廓进度的角度测量替换为曲线长度测量,这允许使用更复杂的形状进行变形。(I75478) , I390dd
  • 改进了特征映射算法,因此更多变形应看起来更自然。(I83287)

API 更改

  • 添加 SVG 路径导入和特征序列化器。通常的流程是
    • 使用新的 SvgPathParser.parseFeatures() 将 svg 路径(svg 的 path 元素的 d 属性的值)转换为 List<Feature>
    • 可以修改它,然后使用 FeatureSerializer.serialize() 将其序列化为字符串。
    • 生成的结果字符串可以在生产代码中使用,通过 FeatureSerializer.parse() 导入。
    • 请注意,步骤 1 和 2 只执行一次,并且可以通过新应用完成。生产代码通常只需要执行步骤 3。(I9bd00, b/371196190), (Ic3842), (If68ed), (I10251)
  • 公开多边形特征和特征类型。现在可以使用带有 List<Features> 的基本构造函数创建更通用的 RoundedPolygons。特征主要是三次贝塞尔曲线的列表,但它们被标记以帮助 Morph 算法在起始和结束形状之间进行匹配(凸角映射到凸角,凹角映射到凹角)。(I61e76), (I1fc5c)
  • 增加了对 watchosDeviceArm64 KMP 目标和目标 kotlin 1.9 的支持。(Icf15d, b/364652024)

Bug 修复

  • 修复了最后一个特征为空时的边缘情况。(I390dd)
  • 使 RoundedPolygon 创建更健壮。(Ib862c, b/360888486)
  • 修复了 RoundedPolygon 初始化中的错误。(I83ddb)
  • 修复了估计多边形中心算法中的错误。(Ida147)

Graphics Shapes 版本 1.0

版本 1.0.0

2024 年 9 月 4 日

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

版本 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 形状从周长上的非默认点开始其曲线。这在动画形状路径的描边时非常有用,可以从形状轮廓上的特定位置开始绘制。(Ifbb4d, b/324303807)
  • 添加了 calculateBounds() 函数到 Morph,这与 RoundedPolygon 上的相同函数并行。(I8a3b6, b/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 更改

Bug 修复

  • 绘制这些形状作为描边路径时偶尔会出现渲染伪影,这是由于与零长度曲线相关的低级渲染问题。此错误通过消除所有零长度曲线(形状不需要它们,因此也节省了形状生成的路径开销)来修复。

版本 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 更改以及 Bug 修复。
  • 许多 API 更改使 Shapes 库对 KMP 友好。这使得从非 Android 代码(例如与 Android 无关的 Compose 代码)调用更容易。例如,API 中没有 Android 类型,例如以前的 PointF、Matrix 和 Path 类型。
  • 出于性能原因,还对 API 和实现进行了一些更改,特别是为了最小化对象分配(和收集)。例如,从 PointF 到单独的浮点参数的移动避免了分配许多临时 PointF 结构来保存这些顶点。

API 更改

  • Morph.asMutableCubics 替换为迭代 MutableCubics 的函数。更改了 PointTransformer 函数式接口,现在它接受 Point 的 x 和 y 坐标并返回 TransformedResult(由转换后的 x 和 y 坐标构造)。(I6719e)
  • 删除了公共 Cubic 构造函数并使其成为工厂函数。(I409ce)
  • 添加 Android 特定的转换和绘图 API (I079f6, b/292289543)
  • 消除 Android 依赖项 (Iadc1c, b/292289543)
  • 锚点和控制属性名称现在更合理 (If13bd, b/294562941)
  • PointF 参数更改为 Float 对 (Id4705, b/276466399, b/290254314)
  • progress 现在直接传递给 Morph 绘图命令 (Icdca2)

Bug 修复

版本 1.0.0-alpha03

2023 年 6 月 7 日

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

API 更改

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

Bug 修复

  • 修复了平滑处理时的错误 (Ibf894)
  • 修复了起始和结束形状相同时发生的错误。更好地分配边上的可用空间用于切割,首先将可用空间用于圆角,然后如果还有空间则用于平滑。(Ibd320, b/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,以在起始和结束形状之间进行动画处理。随着时间推移对该进度进行动画处理,并在每一帧上绘制结果,以创建这些新圆角形状之间的平滑动画。

Graphics Path 版本 1.0

版本 1.0.1

2024 年 5 月 1 日

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

Bug 修复

  • 编译器标志的改进。

版本 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 包含这些提交。

Bug 修复

  • 改进了 PathIterator 在 API < 34 上的性能 (Id4629)

版本 1.0.0-beta02

2024 年 1 月 10 日

此版本中的所有更改都旨在减小库的大小,由于本机代码的假设,库的大小比必要的大。

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

Bug 修复

  • 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 更改

Bug 修复

  • 各种修复和性能改进,包括库处理圆锥曲线的方式。

版本 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 的版本。

Graphics Core 版本 1.0

版本 1.0.3

2025 年 3 月 26 日

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

Bug 修复

  • 修复了在某些 API<33 的设备上绘图时全屏闪烁的问题。

版本 1.0.2

2024 年 10 月 16 日

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

Bug 修复

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

版本 1.0.1

2024 年 9 月 4 日

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

Bug 修复

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

版本 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 中次要的 bug 修复和性能改进

版本 1.0.0-rc01

2024 年 4 月 17 日

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

Bug 修复

  • 修复了在某些运行 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,以支持在 View 层次结构中使用 Android 2d 图形 API(Canvas + Paint)进行低延迟渲染。
  • 引入了 CanvasBufferedRenderer API,以支持硬件加速的 Canvas 渲染到 HardwareBuffer。这可用于将用户界面的一部分绘制到缓冲区中,然后可以使用 Bitmap.wrapHardwareBuffer API 将其转换为位图。

API 更改

  • 更新了 CanvasBufferRenderer#releaseBuffer API,使其具有可选的围栏参数。更新了文档以描述何时返回 RenderResult#fence。(If1ea7)
  • 添加 draw 方法到 RenderRequest 以支持利用协程调度绘制请求。将以前接受执行器的 draw 方法重命名为 drawAsync。将 isClosed() 方法重构为属性。(I5bff6)
  • CanvasFrontBufferRenderer 公开缓冲区格式参数,以直接映射到 CanvasBufferedRenderer.Builder#setBufferFormat (I0f272)
  • 创建了 CanvasBufferedRenderer API,以处理硬件加速的 canvas 渲染到 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 以支持以低延迟渲染内容并与 View 层次结构渲染同步的简单用例。这通过内部管理 SurfaceView 实例来减轻与 SurfaceView 管理相关的复杂性,该实例会根据需要进行屏幕内外转换,以实现同步和低延迟渲染。(I9253b)
  • CanvasFrontBufferedRenderer API 添加了颜色空间配置支持。更新了多缓冲区回调,使其也包含后缓冲区 SurfaceControl (I24bd9)

版本 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 添加了 width + height 参数,以从 SurfaceHolder#Callbacks 管道尺寸。(I7f9fc)
  • 添加了 clear API 来清除前缓冲区和多缓冲区层。(Ic1f95)
  • 添加了配置 GLFrontBufferedRenderer 中使用的交换链底层缓冲区类型的支持。(I07a13)
  • GLFrameBufferRenderer 上的 getter 添加了 kotlin 属性,为最大缓冲区条目添加了 IntRange 注解,并为 setFormat/setUsage 分别添加了 HardwareBufferFormartHardwareBufferUsage 注解。(Ief89e)
  • 更新了 SurfaceControl 事务上的 setBuffer API,以提供释放栅栏。(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,使 3P 能够利用使用 Canvas API 的前缓冲渲染系统。(Ibfc29)

Bug 修复

  • 修复了 GLFrontBufferedRenderer 在相应 Activity 恢复后失效的问题。
  • 修复了前置缓冲内容过早清除的问题。
  • 修复了在低延迟图形 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,以支持从另一个 SurfaceControl 实例配置父 SurfaceControl,除了现有从 SurfaceView 配置的机制。(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 更改

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

Bug 修复

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

版本 1.0.0-alpha01

2022 年 10 月 24 日

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

新功能

  • graphics core AndroidX 库的首次发布。这包括支持手写笔输入等低延迟用例的 API。这还引入了一些用于 OpenGL 用法的辅助 API。

API 更改

  • 引入了 GLFrontBufferedRenderer 以协助进行前缓冲和多缓冲渲染,从而实现低延迟和高质量的渲染输出。
  • 引入了 GLRenderer API,以协助 OpenGL 渲染各种 Surface 供应商,如 SurfaceViewTextureView 等。