Brush API 提供工具,可定義筆劃的視覺樣式。您可以建立不同顏色、大小和系列的筆刷,呈現各種效果。
Android 技能
前往 GitHub 查看建立自訂筆刷
使用
ink-custom-brush-builder Android 技能,在 Jetpack Compose 中設計自訂 BrushFamily 樣式,並加入自訂筆尖、動態行為、紋理和塗層。如要透過 Android CLI 安裝技能,請執行:
android skills add ink-custom-brush-builder建立筆刷
如要建立筆刷,請使用 Compose Brush 伴生物件方法,並搭配 Brush.Companion.createWithComposeColor 等具名引數。這個類別可讓您設定下列屬性:
family:筆刷的樣式,類似於文字的字體或字型。如要查看可用的BrushFamily值,請參閱StockBrushes。color:筆刷顏色。您可以使用ColorLong設定顏色。size::使用筆刷建立的筆觸整體粗細。epsilon:在筆劃生成幾何圖形時,兩個點應視為視覺上不同的最短距離。epsilon 和筆劃點的比率會控制筆劃可放大的程度,而不會產生不自然感,但會耗用記憶體。筆劃單位的建議起始值為 1 px,epsilon 的建議起始值為 0.1。Epsilon 值越高,使用的記憶體越少,但在出現三角形構件之前,可縮放的程度也越低。請多方嘗試,找出適合您用途的值。
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Black, size = 5F, epsilon = 0.1F )
修改筆刷屬性
您可以使用 copyWithComposeColor() 方法建立現有筆刷的副本,以便變更筆刷的任何屬性。
val redBrush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
自訂筆刷
雖然 StockBrushes 提供多種常見筆刷,但 Ink API 也提供進階路徑,可建立全新的筆刷行為,呈現獨特的藝術效果,或複製特定現有筆刷,以確保回溯相容性。
自訂 BrushFamily 會從序列化格式載入。必要格式為 BrushFamily 通訊協定緩衝區的 gzip 壓縮二進位編碼。現在,您可以載入並使用自訂筆刷檔案。還原序列化後,自訂 BrushFamily 可用於建立具有特定顏色和大小的新 Brush,就像任何 StockBrushes 系列一樣。
class CustomBrushes(val context: Context) { companion object { private const val TAG = "CustomBrushes" } val brushes by lazy { loadCustomBrushes() } @OptIn(ExperimentalInkCustomBrushApi::class) private fun loadCustomBrushes(): List<CustomBrush> { val brushFiles = mapOf( "Calligraphy" to (R.raw.calligraphy to R.drawable.draw_24px), "Flag Banner" to (R.raw.flag_banner to R.drawable.flag_24px), "Graffiti" to (R.raw.graffiti to R.drawable.format_paint_24px), // ... ) val loadedBrushes = brushFiles.mapNotNull { (name, pair) -> val (resourceId, icon) = pair val brushFamily = context.resources.openRawResource(resourceId).use { inputStream -> BrushFamily.decode(inputStream) } CustomBrush(name, icon, brushFamily) } return loadedBrushes } } data class CustomBrush( val name: String, val icon: Int, val brushFamily: BrushFamily )