Las APIs de Brush te proporcionan las herramientas para definir el estilo visual de tus trazos. Puedes crear pinceles con diferentes colores, tamaños y familias para lograr una variedad de aspectos.
Crea un pincel
Para crear un pincel, usa los métodos complementarios Brush de Compose con argumentos con nombre, como Brush.Companion.createWithComposeColor.
Esta clase te permite establecer las siguientes propiedades:
family: Es el estilo del pincel, similar a un tipo de letra o una fuente en el texto. ConsultaStockBrushespara conocer los valores deBrushFamilydisponibles.color: Es el color del pincel. Puedes establecer el color con unColorLong.size: Es el grosor general de los trazos creados con el pincel.epsilon: Es la distancia más pequeña por la que se deben considerar dos puntos visualmente distintos para los fines de la geometría de generación de trazos. La proporción de épsilon y puntos de trazo controla cuánto se puede acercar un trazo sin artefactos, a costa de la memoria. Un buen punto de partida para las unidades de trazo es 1 px, y un buen punto de partida para épsilon es 0.1. Los valores de épsilon más altos usan menos memoria, pero permiten menos zoom antes de que aparezcan artefactos de triángulos. Experimenta para encontrar el valor adecuado para tu caso de uso.
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Black, size = 5F, epsilon = 0.1F )
Modifica las propiedades del pincel
Puedes crear una copia de un pincel existente con el método copyWithComposeColor(), que te permite cambiar cualquiera de las propiedades del pincel.
val redBrush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
Pinceles personalizados
Si bien StockBrushes proporciona un conjunto versátil de pinceles comunes, la API de Ink también ofrece una ruta avanzada para crear comportamientos de pincel completamente nuevos para efectos artísticos únicos o para replicar pinceles existentes específicos para la retrocompatibilidad.
Se carga un BrushFamily personalizado desde su formato serializado. El formato requerido
es la codificación binaria comprimida con gzip del
búfer de protocolo BrushFamily. Esto te permite cargar y usar
archivos de pinceles personalizados hoy mismo. Una vez deserializado, el BrushFamily personalizado se puede usar para crear un Brush nuevo con un color y un tamaño específicos, como cualquiera de las familias de 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 )