Les API Brush vous fournissent les outils nécessaires pour définir le style visuel de vos traits. Vous pouvez créer des pinceaux avec différentes couleurs, tailles et familles pour obtenir différents styles.
Créer un pinceau
Pour créer un pinceau, utilisez les méthodes associées Brush de Compose avec des arguments nommés tels que Brush.Companion.createWithComposeColor.
Cette classe vous permet de définir les propriétés suivantes :
family: style du pinceau, analogue à une typographie ou une police dans le texte. ConsultezStockBrushespour connaître les valeursBrushFamilydisponibles.color: couleur du pinceau. Vous pouvez définir la couleur à l'aide d'unColorLong.size: épaisseur globale des traits créés avec le pinceau.epsilon: distance minimale à partir de laquelle deux points doivent être considérés comme visuellement distincts pour la géométrie de génération de traits. Le rapport entre epsilon et les points de tracé contrôle le niveau de zoom maximal d'un tracé sans artefacts, au détriment de la mémoire. Un bon point de départ pour les unités de contour est 1 px, et un bon point de départ pour l'epsilon est 0,1. Les valeurs epsilon plus élevées utilisent moins de mémoire, mais permettent un zoom moins important avant que des artefacts triangulaires n'apparaissent. Faites des tests pour trouver la valeur adaptée à votre cas d'utilisation.
val brush = Brush.createWithComposeColor(
family = StockBrushes.pressure(),
colorIntArgb = Color.Black,
size = 5F,
epsilon = 0.1F
)
Modifier les propriétés du pinceau
Vous pouvez créer une copie d'un pinceau existant à l'aide de la méthode copyWithComposeColor(), qui vous permet de modifier n'importe quelle propriété du pinceau.
val redBrush = Brush.createWithComposeColor(
family = StockBrushes.pressurePen(),
colorIntArgb = Color.RED,
size = 5F,
epsilon = 0.1F
)
val blueBrush = redBrush.copyWithComposeColor(color = Color.BLUE)
Pinceaux personnalisés
While StockBrushes provides a versatile set of
common brushes, Ink API also offers an advanced path for creating entirely new
brush behaviors for unique artistic effects or to replicate specific existing
brushes for backward compatibility.
A custom BrushFamily is loaded from its serialized format. The required format
is the gzipped binary encoding of the
BrushFamily protocol buffer. This lets you load and use
custom brush files today. Once deserialized, the custom BrushFamily can be
used to create a new Brush with a specific color and size, just like any of
the StockBrushes families.
class CustomBrushes(val context: Context) {
private const val TAG = "CustomBrushes"
val brushes by lazy { loadCustomBrushes(context) }
@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.copy(clientBrushFamilyId = name))
}
return loadedBrushes
}
}
data class CustomBrush(
val name: String,
val icon: Int,
val brushFamily: BrushFamily
)