توفّر لك واجهات برمجة التطبيقات Brush الأدوات اللازمة لتحديد النمط المرئي لضربات الفرشاة. يمكنك إنشاء فُرش بألوان وأحجام ومجموعات مختلفة للحصول على مجموعة متنوعة من المظاهر.
مهارات Android
العرض على GitHubإنشاء فُرش حبر مخصّصة
ink-custom-brush-builder مهارة Android لتصميم أنماط BrushFamily مخصّصة في Jetpack Compose باستخدام أطراف مخصّصة وسلوكيات ديناميكية وأنسجة وطبقات.android skills add ink-custom-brush-builderإنشاء فرشاة
لإنشاء فرشاة، استخدِم إجراءات Compose المصاحبة Brush مع وسيطات مُسمّاة مثل Brush.Companion.createWithComposeColor.
تتيح لك هذه الفئة ضبط السمات التالية:
-
family: نمط الفرشاة، وهو مشابه لخط الطباعة أو الخط في النص. راجِعStockBrushesللاطّلاع على قيمBrushFamilyالمتاحة. -
color: لون الفرشاة يمكنك ضبط اللون باستخدامColorLong. -
size: السُمك الإجمالي للضربات التي يتم إنشاؤها باستخدام الفرشاة -
epsilon: أصغر مسافة يجب اعتبار نقطتَين فيها مختلفتَين بصريًا لأغراض هندسة إنشاء الخطوط تتحكّم نسبة إبسيلون ونقاط الخط في مقدار تكبير الخط بدون ظهور تشوهات، وذلك على حساب الذاكرة. نقطة البداية الجيدة لوحدات الخطوط هي 1 بكسل، ونقطة البداية الجيدة لقيمة epsilon هي 0.1. تستخدم قيم 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 )