As APIs Brush oferecem as ferramentas para
definir o estilo visual dos traços. Você pode criar pincéis com diferentes
cores, tamanhos e famílias para conseguir uma variedade de visuais.
Habilidades do Android
Ver no GitHubCriar pincéis de tinta personalizados
ink-custom-brush-builder habilidade do Android para criar estilos personalizados de BrushFamily no Jetpack Compose com pontas, comportamentos dinâmicos, texturas e camadas personalizadas.android skills add ink-custom-brush-builderCriar um pincel
Para criar um pincel, use os métodos complementares
Brush do Compose com argumentos nomeados, como
Brush.Companion.createWithComposeColor.
Essa classe permite definir as seguintes propriedades:
family: o estilo do pincel, semelhante a uma família tipográfica ou fonte em um texto. ConsulteStockBrushespara conferir os valores deBrushFamilydisponíveis.color: a cor do pincel. É possível definir a cor usando umColorLong.size: a espessura geral dos traços criados com o pincel.epsilon: a menor distância em que dois pontos devem ser considerados visualmente distintos para fins de geometria de geração de traços. A proporção de epsilon e pontos de traço controla o quanto um traço pode ser ampliado sem artefatos, ao custo de memória. Um bom ponto de partida para as unidades de traço é 1 px, e um bom ponto de partida para o epsilon é 0,1. Valores de épsilon mais altos usam menos memória, mas permitem menos zoom antes que os artefatos de triângulo apareçam. Faça testes para encontrar o valor certo para seu caso de uso.
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Black, size = 5F, epsilon = 0.1F )
Modificar as propriedades do pincel
É possível criar uma cópia de um pincel usando o método copyWithComposeColor(), que permite mudar qualquer uma das propriedades dele.
val redBrush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
Pincéis personalizados
Embora o StockBrushes ofereça um conjunto versátil de
pincéis comuns, a API Ink também oferece um caminho avançado para criar comportamentos de pincel
totalmente novos para efeitos artísticos exclusivos ou para replicar pincéis
específicos para compatibilidade com versões anteriores.
Um BrushFamily personalizado é carregado do formato serializado. O formato obrigatório
é a codificação binária compactada com gzip do
buffer de protocolo BrushFamily. Isso permite carregar e usar
arquivos de pincel personalizados hoje mesmo. Depois de desserializado, o BrushFamily personalizado pode ser
usado para criar um novo Brush com uma cor e um tamanho específicos, como qualquer uma
das famílias 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 )