圖像
下表列出 androidx.graphics
群組的所有構件。
構件 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
graphics-core | 1.0.2 | - | - | - |
graphics-path | 1.0.1 | - | - | - |
圖形形狀 | 1.0.1 | - | - | 1.1.0-alpha01 |
宣告依附元件
如要新增 Graphics 的依附元件,必須將 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.1.0-alpha01" }
Kotlin
dependencies { implementation("androidx.graphics:graphics-core:1.0.2") implementation("androidx.graphics:graphics-path:1.0.1") implementation("androidx.graphics:graphics-shapes:1.1.0-alpha01") }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。
詳情請參閱 Issue Tracker 文件。
這個構件沒有任何版本資訊。
圖形 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
。特徵主要為 Cubic 貝茲曲線清單,但會加上標記,以利 Morph 演算法比對起始和結束形狀 (凸角會對應至凸角,凹角會對應至凹角)。(I61e76)、(I1fc5c) - 新增對
watchosDeviceArm64
KMP 目標和 kotlin 1.9 目標的支援。(Icf15d、b/364652024)
修正錯誤
- 修正最後一個功能為空白的邊緣案例。(I390dd)
- 讓
RoundedPolygon
建立作業更健全。(Ib862c、b/360888486)。 - 修正
RoundedPolygon
初始化作業中的錯誤。(I83ddb)。 - 修正用於估算多邊形中心的演算法錯誤。(Ida147)。
Graphics Shapes 1.0 版
1.0.0 版本
2024 年 8 月 21 日
發布 androidx.graphics:graphics-shapes:1.0.0
、androidx.graphics:graphics-shapes-android:1.0.0
和 androidx.graphics:graphics-shapes-desktop:1.0.0
。1.0.0 版包含這些修訂版本。
1.0.0-rc01 版
2024 年 7 月 24 日
發布 androidx.graphics:graphics-shapes:1.0.0-rc01
、androidx.graphics:graphics-shapes-android:1.0.0-rc01
和 androidx.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-beta01
、androidx.graphics:graphics-shapes-android:1.0.0-beta01
和 androidx.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-alpha05
、androidx.graphics:graphics-shapes-android:1.0.0-alpha05
和 androidx.graphics:graphics-shapes-desktop:1.0.0-alpha05
。查看 1.0.0-alpha05 版的修訂項。
新功能
- 程式庫現在提供新的
pill()
和pillStar()
函式,可輕鬆建立這些圓形/星形圖形。此外,我們也推出了新的 API,可計算形狀所需的確切邊界 (先前的邊界只是根據基礎貝茲曲線錨點和控制點進行估算),以及可能的最大邊界,這有助於判斷容器的大小 (如果形狀會在容器內旋轉)。(I71827)。
API 變更
- 現可透過更多選項擷取確切和最大邊界。(I6d49f、b/317286450)。
修正錯誤
- 由於零長度曲線的低階轉譯問題,因此在以描邊路徑繪製這些形狀時,偶爾會產生轉譯異常。我們已修正這個錯誤,方法是移除所有長度為零的曲線 (形狀不需要這些曲線,因此也節省了形狀產生路徑的額外負擔)。
1.0.0-alpha04 版本
2023 年 12 月 13 日
發布 androidx.graphics:graphics-shapes:1.0.0-alpha04
、androidx.graphics:graphics-shapes-android:1.0.0-alpha04
和 androidx.graphics:graphics-shapes-desktop:1.0.0-alpha04
。1.0.0-alpha04 版包含以下修訂項目。
新功能
- 這個版本包含多項 API 變更和錯誤修正。
- 許多 API 變更可讓形狀程式庫與 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)
修正錯誤
- 修正建立大型形狀時的錯誤。(I4fd66、b/313497325)。
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)
修正錯誤
- 修正平滑處理的錯誤 (Ibf894)
- 修正了開始和結束形狀相同時發生的錯誤。可更妥善地分配可用空間來進行裁切,首先使用可用空間進行圓角處理,然後如果還有空間,再進行平滑處理。(Ibd320、b/277936300)。
1.0.0-alpha02 版
2023 年 4 月 19 日
發布 androidx.graphics:graphics-shapes:1.0.0-alpha02
。1.0.0-alpha02 版包含此連結所列的修訂項目。
API 變更
- 多邊形父類別已與其子類別
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 變更
- 移除了實驗性
isAtLeastU()
API 的用法 (Ie9117、b/289269026)
修正錯誤
- 修正多項問題並改善效能,包括程式庫處理圓錐曲線的方式。
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 查詢路徑資料。使用這個 API,呼叫端可以逐一疊代 Path 物件的所有區段,以決定這些區段的作業和資料。 - 這個程式庫使用 Android 14 預覽版中推出的類似 API,但這個 AndroidX 版本的 API 也適用於 API 21 以下的版本。
Graphics Core 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 的主要功能
- 圖像核心程式庫的官方穩定版。包含 1.0.0-rc01 中的次要錯誤修正和效能改善
1.0.0-rc01 版
2024 年 4 月 17 日
發布 androidx.graphics:graphics-core:1.0.0-rc01
。這個版本是在內部分支版本中開發而成。
修正錯誤
- 修正在搭載 Android 14 的特定 Android 裝置上,可能會導致檔案描述項與
CanvasBufferedRendererAPI
重複關閉的問題。 - 修正
FrameBuffer
無法正確刪除 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
,以便利用協同程式排定繪圖要求。將先前使用執行者的繪圖方法重新命名為drawAsync
。將isClosed()
方法重構為屬性。(I5bff6)。 - 將緩衝區格式參數公開給
CanvasFrontBufferRenderer
,以便直接對應至CanvasBufferedRenderer.Builder#setBufferFormat
(I0f272) - 建立
CanvasBufferedRenderer
API,以便處理硬體加速無框畫算繪至HardwareBuffer
。這會為 Android Q 提供回溯移植的實作項目,並設定HardwareBuffers
的交換鏈深度。ColorSpace
設定仍限於 Android U+,但相容性實作會代替開發人員提供無操作行為。(I9b1d8) - 將
setFrameRate
/clearFrameRate
API 新增至SurfaceControlCompat.Transaction
,以便控制影格速率和變更策略,以便進行無縫或預設轉場。(I6045c)。 setDataSpace
的 API 級別需求已從 Android T 降至 Android Q。(I59c34)。- 將
onBufferReleased
回呼新增至GLFrameBufferRenderer
API,讓消費者有機會在不再顯示緩衝區時清理狀態 (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 中新增寬度 + 高度參數,以便從
SurfaceHolder#Callbacks
傳送尺寸。(I7f9fc) - 新增清除 API,用於清除前端和多緩衝區層。(Ic1f95)。
- 新增支援功能,可設定
GLFrontBufferedRenderer
中使用的交換鏈的基礎緩衝區類型。(I07a13) - 分別為
GLFrameBufferRenderer
的 getter 新增 Kotlin 屬性、為最大緩衝區項目新增IntRange
註解,以及為setFormat
/setUsage
新增HardwareBufferFormart
和HardwareBufferUsage
註解。(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) - 請將參照雙緩衝區轉譯的轉譯方法重新命名為多緩衝區,因為後援互換鏈可能包含超過 2 個緩衝區。(I830d7)。
- 建立
CanvasFrontBufferedRenderer
API,讓 3ps 能夠使用 Canvas API 運用前端緩衝轉譯系統。(Ibfc29)
修正錯誤
- 修正問題:在恢復相應活動後,
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
物件,以及可用於在轉譯至中繼暫存緩衝區後,重新指定原始目的地的影格緩衝區 ID。(I7fe20) - 將
SyncFence
建立作業整合至SyncFenceCompat
上的靜態工廠方法。 - 移除了
eglDupNativeFenceFDANDROID
的公開相容性方法,改用SyncFenceCompat
工廠方法建立 SyncFence。這麼做是為了確保所有 API 途徑都能收到正確的SyncFence
實作項目,無論 API 級別為何皆然。(I849bb) - 新增
FrameBufferRenderer
和SyncStrategy
說明文件。- 已將
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#cancel
和GLFrontBufferedRenderer#execute
方法。前者適用於手掌拒絕情境,因為在這種情境下,您應取消轉譯至前端緩衝區的作業,並隱藏前端緩衝區。後者可用於在 GL 執行緒上操控物件,而無需排程轉譯。(If0b7f) - 新增 API,直接算繪至雙緩衝區層。這有助於在繼續執行後重新算繪場景,並讓使用者有權決定何時要根據要算繪的場景,動態運用前端緩衝算繪。(Ied56c)。
- 除了
SurfaceView
現有機制外,我們也新增了SurfaceControlCompat.Builder
的 API,可支援從其他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) 的問題。
- 修正了
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 供應商 (例如SurfaceView
、TextureView
等) 進行 OpenGL 轉譯。