میاناهای برنامه‌سازی کاربردی قلم‌مو

Brush میاناهای برنامه‌سازی کاربردی ابزارهایی را برای تعریف سبک دیداری قلم‌ضربه دراختیارتان قرار می‌دهد. می‌توانید قلم‌موهایی با رنگ‌ها، اندازه‌ها، و خانواده‌های مختلف ایجاد کنید تا به ظاهر متنوعی دست یابید.

ایجاد قلم‌مو

برای ایجاد قلم‌مو، از روش‌های همراه Compose Brush با آرگومان‌های نام‌گذاری‌شده مانند Brush.Companion.createWithComposeColor استفاده کنید. این کلاس به شما امکان می‌دهد ویژگی‌های زیر را تنظیم کنید:

  • family: سبک قلم‌مو، مشابه طرح حروف یا قلم در نوشتار. برای مقادیر دردسترس BrushFamily، StockBrushes را ببینید.
  • ‫color: رنگ قلم‌مو. می‌توانید رنگ را بااستفاده از ColorLong تنظیم کنید.
  • size: ضخامت کلی ضربه‌های ایجادشده با قلم‌مو.
  • epsilon: کوچک‌ترین فاصله‌ای که دو نقطه باید برای اهداف هندسه تولید ضربه ازنظر بصری متمایز درنظر گرفته شوند. نسبت اپسیلون و نقاط قلم‌ضربه کنترل می‌کند که قلم‌ضربه تا چه اندازه می‌تواند بدون آرتیفکت بزرگ‌نمایی شود، به قیمت حافظه. نقطه شروع خوب برای واحدهای قلم‌ضربه ۱ پیکسل است و نقطه شروع خوب برای اپسیلون ۰٫۱ است. مقادیر اپسیلون بالاتر از حافظه کمتری استفاده می‌کنند اما قبل‌از ظاهر شدن آثار مثلثی، امکان بزرگ‌نمایی کمتری را فراهم می‌کنند. برای پیدا کردن مقدار مناسب برای مورد استفاده‌تان، آزمایش کنید.

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
)