图形

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

下表列出了 androidx.graphics 组中的所有工件。

制品 稳定版 候选版 Beta 版 Alpha 版
graphics-core 1.0.3 - - -
graphics-path 1.0.1 - - -
图形-形状 1.0.1 - - 1.1.0-alpha01
此库的最后更新时间:2025 年 3 月 26 日

声明依赖项

如需添加 Graphics 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库

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

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")
}

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

此工件没有版本说明。

图形版本 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。(I9bd00b/371196190)、(Ic3842)、(If68ed)、(I10251
  • 公开多边形功能和功能类型。现在,可以使用采用 List<Features> 的基本构造函数创建更通用的 RoundedPolygons。特征主要是一个 Cubic Bezier 曲线列表,但它们带有标记,可帮助变形算法在开始形状和结束形状之间进行匹配(凸角映射到凸角,凹角映射到凹角)。(I61e76)、(I1fc5c)
  • 添加了对 watchosDeviceArm64 KMP 目标和目标 Kotlin 1.9 的支持。(Icf15db/364652024

bug 修复

  • 修复了最后一个功能为空时的极端情况。(I390dd)
  • 增强 RoundedPolygon 创建功能。(Ib862cb/360888486
  • 修复了 RoundedPolygon 初始化方面的 bug。(I83ddb)
  • 修复了用于估计多边形中心的算法中的错误。(Ida147)

图形形状版本 1.0

版本 1.0.1

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 形状从周边的非默认点开始绘制曲线。在为形状路径的描边添加动画效果时,这非常有用,可用于从形状轮廓上的特定位置开始绘制。 (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

bug 修复

  • 将这些形状绘制为描边路径时,偶尔会出现渲染伪影,这是由于与零长度曲线相关的低级渲染问题所致。此 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 迁移到单独的 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)

bug 修复

版本 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)

bug 修复

  • 修复了平滑处理方面的 bug (Ibf894)
  • 修复了当开始形状和结束形状相同时出现的 bug。更好地分配侧面上的可用空间以进行剪切,首先使用可用空间进行圆角处理,如果还有剩余空间,则用于平滑处理。(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。此版本是从内部分支发布的。

新功能

  • 使用多边形 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 中包含这些提交内容

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 修复

  • 提升了 API < 34 上 PathIterator 的性能 (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 及更高版本。

图形核心版本 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 的主要功能

  • 图形核心库的正式稳定版。包含 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,以支持在视图层次结构中使用 Android 的 2D 图形 API(Canvas + Paint)进行低延迟渲染。
  • 引入了 CanvasBufferedRenderer API,以支持对 HardwareBuffer 进行硬件加速画布渲染。这可用于将界面的一部分绘制到缓冲区中,然后使用 Bitmap.wrapHardwareBuffer API 将其转换为位图。

API 变更

  • 更新了 CanvasBufferRenderer#releaseBuffer API,使其具有可选的 fence 参数。更新了文档,以说明何时返回 RenderResult#fence。(If1ea7)
  • RenderRequest 添加了 draw 方法,以支持利用协程来安排绘制请求。将之前使用执行器的 draw 方法重命名为 drawAsync。将 isClosed() 方法重构为属性。(I5bff6)
  • CanvasFrontBufferRenderer 公开了缓冲区格式参数,以直接映射到 CanvasBufferedRenderer.Builder#setBufferFormat (I0f272)
  • 创建了 CanvasBufferedRenderer API,用于处理硬件加速的画布渲染到 HardwareBuffer 中。这为 Android Q 提供了一个向后移植的实现,同时配置了 HardwareBuffers 的交换链深度。ColorSpace 配置仍然仅限于 Android U+,但兼容性实现会代表开发者提供 no-op 行为。(I9b1d8)
  • SurfaceControlCompat.Transaction 添加了 setFrameRate/clearFrameRate API,以便在无缝或默认过渡的更改策略旁边控制帧速率。(I6045c)
  • setDataSpace 的必需 API 级别从 Android T 降至 Android Q。(I59c34)
  • GLFrameBufferRenderer API 添加了 onBufferReleased 回调,以便让使用方有机会在不再呈现缓冲区时清理状态 (I8a4e2)
  • 创建 LowLatencyCanvasView 以支持低延迟渲染内容(与视图层次结构渲染同步)的简单用例。通过在内部管理 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 添加了宽度和高度参数,以从 SurfaceHolder#Callbacks 传递尺寸。(I7f9fc)
  • 添加了用于清除前端和多缓冲图层的清除 API。(Ic1f95)
  • 添加了对配置 GLFrontBufferedRenderer 中使用的交换链的底层缓冲区类型的支持。(I07a13)
  • GLFrameBufferRendererIntRange 注解(用于最大缓冲区条目)以及 HardwareBufferFormartHardwareBufferUsage 注解(分别用于 setFormat/setUsage)上的 getter 添加了 Kotlin 属性。(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,以允许使用可为 null 的 HardwareBuffer 实例,从而镜像相应的平台 API (I173d7)
  • 将引用双缓冲渲染的方法重命名为多缓冲,因为后备交换链可能包含 2 个以上的缓冲区。(I830d7)
  • 创建 CanvasFrontBufferedRenderer API,以使第三方能够利用 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 Surface 都能获得正确的 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)
  • 更多已废弃隐藏函数的返回值类型可为 null (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)

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 中包含这些提交内容

新功能

  • 添加了图形核心 AndroidX 库的初始版本。其中包括支持低延迟用例(如触控笔输入)的 API。还引入了一些应用于 OpenGL 的帮助程序 API。

API 变更

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