Le API Ink Brush forniscono un modo per creare e
personalizzare i pennelli per disegnare su una tela.
Creare un pennello
Per creare un pennello, utilizza i metodi di fabbrica Brush con argomenti denominati come Brush.createWithColorLong(). Questa classe
consente di impostare le seguenti proprietà:
family: lo stile del pennello, analogo a un carattere di testo. ConsultaStockBrushesper i valoriBrushFamilydisponibili.color: il colore del pennello. Puoi impostare il colore utilizzando unColorLong.size: Lo spessore di base dei tratti creati con il pennello.epsilon: la distanza più piccola alla quale due punti del tratto devono essere considerati distinti, il che controlla il livello di dettaglio o la fedeltà della geometria del tratto.- Valori più elevati semplificano maggiormente il tratto, il che utilizza meno memoria e il rendering è più veloce, ma può comportare artefatti visibili come bordi frastagliati quando si esegue lo zoom in avanti.
- Valori più bassi conservano più dettagli per lo zoom di alta qualità, ma aumentano l'utilizzo della memoria.
- Per la prototipazione con una scala di unità di 1 px, 0,1 è un buon punto di partenza. Per le app di produzione che supportano varie densità dello schermo, utilizza unità indipendenti dalla densità (come dp) e regola epsilon di conseguenza.
val redBrush = Brush.createWithColorLong(
family = StockBrushes.pressurePen(),
colorLong = Color.RED.pack(),
size = 5F,
epsilon = 0.1F
)
Modificare le proprietà del pennello
Puoi creare una copia di un pennello esistente utilizzando il
metodo copy(). Questo metodo ti consente di modificare
qualsiasi proprietà del pennello.
val blueBrush = redBrush.copy(colorLong = Color.BLUE.pack())
Pennelli personalizzati
StockBrushes offre un set versatile di pennelli comuni, ma l'API Ink offre anche un percorso avanzato per creare comportamenti di pennello completamente nuovi per effetti artistici unici o per replicare pennelli esistenti specifici per la compatibilità con le versioni precedenti.
Un BrushFamily personalizzato viene caricato dal suo formato serializzato. Il formato richiesto
è la codifica binaria compressa di
BrushFamily protocol buffer. In questo modo puoi caricare e utilizzare
oggi stesso i file di pennelli personalizzati. Una volta deserializzato, il BrushFamily personalizzato può essere
utilizzato per creare un nuovo Brush con un colore e una dimensione specifici, proprio come qualsiasi delle
famiglie 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
)