Les API Ink Brush permettent de créer et de personnaliser des pinceaux pour dessiner sur un canevas.
Créer un pinceau
Pour créer un pinceau, utilisez les méthodes de fabrique Brush avec des arguments nommés tels que Brush.createWithColorLong(). 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 de base des traits créés avec le pinceau.epsilon: distance minimale à laquelle deux points du tracé doivent être considérés comme distincts, ce qui contrôle le niveau de détail ou la fidélité de la géométrie du tracé.- Des valeurs plus élevées simplifient davantage le tracé, ce qui utilise moins de mémoire et rend plus rapidement, mais peut entraîner des artefacts visibles tels que des bords irréguliers lors d'un zoom avant.
- Les valeurs inférieures préservent plus de détails pour un zoom de haute qualité, mais augmentent l'utilisation de la mémoire.
- Pour le prototypage avec une échelle d'unité de 1 px, 0,1 est un bon point de départ. Pour les applications de production compatibles avec différentes densités d'écran, utilisez des unités indépendantes de la densité (comme dp) et ajustez l'epsilon en conséquence.
val redBrush = Brush.createWithColorLong(
family = StockBrushes.pressurePen(),
colorLong = Color.RED.pack(),
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 copy(). Cette méthode vous permet de modifier les propriétés du pinceau.
val blueBrush = redBrush.copy(colorLong = Color.BLUE.pack())
Pinceaux personnalisés
Alors que StockBrushes fournit un ensemble polyvalent de pinceaux courants, l'API Ink offre également une méthode avancée pour créer des comportements de pinceaux entièrement nouveaux afin d'obtenir des effets artistiques uniques ou de reproduire des pinceaux existants spécifiques pour assurer la rétrocompatibilité.
Un BrushFamily personnalisé est chargé à partir de son format sérialisé. Le format requis est l'encodage binaire compressé de BrushFamily protocol buffer. Cela vous permet de charger et d'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) {
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
)