Les API Brush vous fournissent les outils nécessaires pour définir le style visuel de vos traits. Vous pouvez créer des pinceaux de différentes couleurs, tailles et familles pour obtenir différents aspects.
Créer un pinceau
Pour créer un pinceau, utilisez les méthodes complémentaires Compose Brush 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 de 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 pour laquelle deux points doivent être considérés comme visuellement distincts pour la géométrie de génération de traits. Le ratio entre l'epsilon et les points de tracé détermine le niveau de zoom possible sur un tracé sans artefacts, au détriment de la mémoire. Un bon point de départ pour les unités de trait est 1 px, et un bon point de départ pour epsilon est 0,1. Les valeurs epsilon plus élevées utilisent moins de mémoire, mais permettent moins de zoom avant l'apparition d'artefacts triangulaires. Faites des tests pour trouver la valeur adaptée à votre cas d'utilisation.
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = 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(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
Pinceaux personnalisés
Bien que StockBrushes fournisse un ensemble polyvalent de pinceaux courants, l'API Ink propose également un chemin d'accès avancé pour créer des comportements de pinceau entièrement nouveaux pour des effets artistiques uniques ou pour répliquer des pinceaux existants spécifiques pour la rétrocompatibilité.
Un BrushFamily personnalisé est chargé à partir de son format sérialisé. Le format requis est l'encodage binaire compressé au format gzip du tampon de protocole BrushFamily. Vous pouvez ainsi charger et utiliser des fichiers de pinceaux personnalisés dès aujourd'hui. Une fois désérialisé, le BrushFamily personnalisé peut être utilisé pour créer un Brush avec une couleur et une taille spécifiques, comme n'importe quelle famille 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.copy(clientBrushFamilyId = name)) } return loadedBrushes } } data class CustomBrush( val name: String, val icon: Int, val brushFamily: BrushFamily )