Die Brush APIs bieten Ihnen die Tools, mit denen Sie den visuellen Stil Ihrer Striche definieren können. Sie können Pinsel mit verschiedenen Farben, Größen und Familien erstellen, um unterschiedliche Looks zu erzielen.
Android-Fähigkeiten
Auf GitHub ansehenBenutzerdefinierte Tintenpinsel erstellen
ink-custom-brush-builder können Sie in Jetpack Compose benutzerdefinierte BrushFamily-Stile mit benutzerdefinierten Spitzen, dynamischen Verhaltensweisen, Texturen und Beschichtungen entwerfen.android skills add ink-custom-brush-builderPinsel erstellen
Verwenden Sie zum Erstellen eines Pinsels die Compose-Begleitmethoden Brush mit benannten Argumenten wie Brush.Companion.createWithComposeColor.
Mit dieser Klasse können Sie die folgenden Attribute festlegen:
family: Der Stil des Pinsels, analog zu einer Schriftart oder Schrift im Text. Informationen zu verfügbarenBrushFamily-Werten finden Sie unterStockBrushes.color: Die Farbe des Pinsels. Sie können die Farbe mit einemColorLongfestlegen.size: Die Gesamtdicke der mit dem Pinsel erstellten Striche.epsilon: Der kleinste Abstand, bei dem zwei Punkte für die Geometrie der Stricherzeugung als visuell unterschiedlich betrachtet werden sollen. Das Verhältnis von Epsilon und Strichpunkten bestimmt, wie weit ein Strich ohne Artefakte herangezoomt werden kann, was jedoch auf Kosten des Arbeitsspeichers geht. Ein guter Ausgangspunkt für Stricheinheiten ist 1 px und für Epsilon 0, 1. Höhere Epsilon-Werte verbrauchen weniger Speicher, erlauben aber weniger Zoom, bevor Dreiecksartefakte auftreten. Experimentieren Sie, um den richtigen Wert für Ihren Anwendungsfall zu finden.
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Black, size = 5F, epsilon = 0.1F )
Pinseleigenschaften ändern
Mit der Methode copyWithComposeColor() können Sie eine Kopie eines vorhandenen Pinsels erstellen und alle Attribute des Pinsels ändern.
val redBrush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
Benutzerdefinierte Pinsel
StockBrushes bietet zwar eine vielseitige Auswahl an gängigen Pinseln, die Ink API bietet aber auch eine erweiterte Möglichkeit, völlig neue Pinselverhalten für einzigartige künstlerische Effekte zu erstellen oder bestimmte vorhandene Pinsel für die Abwärtskompatibilität zu replizieren.
Ein benutzerdefiniertes BrushFamily wird aus seinem serialisierten Format geladen. Das erforderliche Format ist die mit gzip komprimierte binäre Codierung des BrushFamily-Protokollzwischenspeichers. So können Sie schon heute benutzerdefinierte Pinseldateien laden und verwenden. Nach der Deserialisierung kann der benutzerdefinierte BrushFamily verwendet werden, um einen neuen Brush mit einer bestimmten Farbe und Größe zu erstellen, genau wie bei den StockBrushes-Familien.
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 )