API 參考:TextBlob 與 Builder
TextBlob 是一組字形(glyphs)的不可變、最佳化表示。在 Skija 中,如果文字佈局(字形位置)不變,這是繪製文字最快的方式。
TextBlob
TextBlob 將字形、位置和字體組合成一個可重複使用的單一物件。
屬性
getBounds():返回 blob 的保守邊界框。getUniqueId():返回用於快取的唯一識別碼。serializeToData():將 blob 序列化為Data物件。
從位置建立
如果您已經計算好字形位置(例如使用 Shaper 或手動計算),可以直接建立 blob。
java
// 僅水平位置(y 為常數)
TextBlob blob = TextBlob.makeFromPosH(glyphs, xPositions, y, font);
// 每個字形的完整 (x, y) 位置
TextBlob blob2 = TextBlob.makeFromPos(glyphs, points, font);
// 每個字形的 RSXform(旋轉 + 縮放 + 平移)
TextBlob blob3 = TextBlob.makeFromRSXform(glyphs, xforms, font);繪製
java
canvas.drawTextBlob(blob, x, y, paint);TextBlobBuilder
TextBlobBuilder 允許您透過附加多個文字「區塊」(runs)來建構 TextBlob。一個「區塊」是指共享相同字體(Font)和繪製樣式(Paint)的一系列字形。
基本用法
java
TextBlobBuilder builder = new TextBlobBuilder();
// 附加一個文字區塊
builder.appendRun(font, "Hello ", 0, 0);
// 附加另一個區塊(例如不同樣式或位置)
builder.appendRun(boldFont, "World!", 100, 0);
// 建構不可變的 TextBlob
TextBlob blob = builder.build();進階附加方法
appendRun(font, glyphs, x, y, bounds):附加具有共享原點的字形。appendRunPosH(...):附加具有明確 X 位置的字形。appendRunPos(...):附加具有明確 (X, Y) 位置的字形。appendRunRSXform(...):附加具有完整仿射變換(旋轉/縮放)的字形。
效能提示
如果您需要多次繪製相同的文字段落(即使畫布移動),請建立一次 TextBlob 並重複使用。這樣可以避免重新計算字形位置和形狀。