Brush API 为您提供了定义笔画视觉样式的工具。您可以创建具有不同颜色、大小和系列的画笔,以实现各种外观。
创建笔刷
如需创建画笔,请使用 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 )