API ของ Brush มีเครื่องมือสำหรับกำหนดรูปแบบภาพของเส้นวาด คุณสามารถสร้างแปรงที่มีสี ขนาด และตระกูลที่แตกต่างกันเพื่อให้ได้รูปลักษณ์ที่หลากหลาย
ทักษะ Android
ดูใน GitHubสร้างแปรงหมึกที่กำหนดเอง
ink-custom-brush-builder ทักษะ Android เพื่อออกแบบสไตล์ BrushFamily ที่กำหนดเองใน Jetpack Compose ด้วยปลายพู่กัน พฤติกรรมแบบไดนามิก พื้นผิว และการเคลือบที่กำหนดเองandroid skills add ink-custom-brush-builderสร้างแปรง
หากต้องการสร้างแปรง ให้ใช้เมธอด Companion ของ Compose Brush กับอาร์กิวเมนต์ที่มีชื่อ เช่น Brush.Companion.createWithComposeColor
คลาสนี้ช่วยให้คุณตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ได้
family: รูปแบบของแปรง ซึ่งคล้ายกับแบบตัวพิมพ์หรือแบบอักษรในข้อความ โปรดดูค่าBrushFamilyที่ใช้ได้ในStockBrushescolor: สีของแปรง คุณตั้งค่าสีได้โดยใช้ColorLongsize: ความหนาโดยรวมของเส้นที่สร้างด้วยแปรงepsilon: ระยะห่างที่น้อยที่สุดที่ควรพิจารณาว่าจุด 2 จุดมีความแตกต่างกันอย่างชัดเจนเพื่อวัตถุประสงค์ทางเรขาคณิตในการสร้างเส้น อัตราส่วนของ epsilon และจุดเส้นควบคุมระดับที่สามารถซูมเข้าเส้นได้โดยไม่มีอาร์ติแฟกต์ โดยแลกกับหน่วยความจำ จุดเริ่มต้นที่ดีสำหรับหน่วยเส้นขีดคือ 1 px และจุดเริ่มต้นที่ดีสำหรับเอปไซลอนคือ 0.1 ค่าเอปไซลอนที่สูงขึ้นจะใช้หน่วยความจำน้อยลง แต่จะทำให้ซูมได้น้อยลงก่อนที่อาร์ติแฟกต์สามเหลี่ยมจะปรากฏขึ้น ทดสอบเพื่อค้นหาค่าที่เหมาะสมสำหรับกรณีการใช้งานของคุณ
val brush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Black, size = 5F, epsilon = 0.1F )
แก้ไขคุณสมบัติของแปรง
คุณสร้างสำเนาของแปรงที่มีอยู่ได้โดยใช้เมธอด copyWithComposeColor() ซึ่งช่วยให้คุณเปลี่ยนพร็อพเพอร์ตี้ของแปรงได้
val redBrush = Brush.createWithComposeColor( family = StockBrushes.pressurePen(), color = Color.Red, size = 5F, epsilon = 0.1F ) val blueBrush = redBrush.copyWithComposeColor(color = Color.Blue)
แปรงที่กำหนดเอง
แม้ว่า StockBrushes จะมีชุดแปรงทั่วไปที่ใช้งานได้หลากหลาย แต่ Ink API ยังมีเส้นทางขั้นสูงสำหรับการสร้างลักษณะการทำงานของแปรงใหม่ทั้งหมดเพื่อเอฟเฟกต์ทางศิลปะที่ไม่เหมือนใคร หรือเพื่อจำลองแปรงที่มีอยู่แล้วเพื่อความเข้ากันได้แบบย้อนหลัง
ระบบจะโหลด BrushFamily ที่กำหนดเองจากรูปแบบที่เรียงลำดับแล้ว รูปแบบที่จำเป็นคือการเข้ารหัสไบนารีที่บีบอัดด้วย gzip ของบัฟเฟอร์โปรโตคอล BrushFamily ซึ่งจะช่วยให้คุณโหลดและใช้ไฟล์แปรงที่กำหนดเองได้แล้ววันนี้ เมื่อดีซีเรียลไลซ์แล้ว คุณจะใช้ BrushFamily ที่กำหนดเองเพื่อสร้าง Brush ใหม่ที่มีสีและขนาดที่เฉพาะเจาะจงได้ เช่นเดียวกับตระกูล 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) } return loadedBrushes } } data class CustomBrush( val name: String, val icon: Int, val brushFamily: BrushFamily )