ব্রাশ API

Brush এপিআই আপনাকে আপনার স্ট্রোকের ভিজ্যুয়াল স্টাইল নির্ধারণের জন্য সরঞ্জাম সরবরাহ করে। আপনি বিভিন্ন রঙ, আকার এবং পরিবারের ব্রাশ তৈরি করতে পারেন যাতে বিভিন্ন ধরণের লুক পাওয়া যায়।

একটি ব্রাশ তৈরি করুন

ব্রাশ তৈরি করতে, Brush.Companion.createWithComposeColor এর মতো নামযুক্ত আর্গুমেন্ট সহ Compose Brush companion পদ্ধতি ব্যবহার করুন। এই ক্লাসটি আপনাকে নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করতে দেয়:

  • family : ব্রাশের স্টাইল, টেক্সটের টাইপফেস বা ফন্টের অনুরূপ। উপলব্ধ BrushFamily মানগুলির জন্য StockBrushes দেখুন।
  • color : ব্রাশের রঙ। আপনি ColorLong ব্যবহার করে রঙ সেট করতে পারেন।
  • size : ব্রাশ দিয়ে তৈরি স্ট্রোকের সামগ্রিক বেধ।
  • epsilon : স্ট্রোক জেনারেশন জ্যামিতির জন্য দুটি বিন্দুর জন্য দৃশ্যত পৃথক দূরত্ব বিবেচনা করা উচিত এমন ক্ষুদ্রতম দূরত্ব। এপসিলন এবং স্ট্রোক পয়েন্টের অনুপাত মেমোরির খরচে আর্টিফ্যাক্ট ছাড়া স্ট্রোককে কতটা জুম করা যেতে পারে তা নিয়ন্ত্রণ করে। স্ট্রোক ইউনিটের জন্য একটি ভাল সূচনা বিন্দু হল 1 px, এবং এপসিলনের জন্য একটি ভাল সূচনা বিন্দু হল 0.1। উচ্চতর এপসিলন মান কম মেমোরি ব্যবহার করে কিন্তু ত্রিভুজ আর্টিফ্যাক্ট প্রদর্শিত হওয়ার আগে কম জুম করার অনুমতি দেয়। আপনার ব্যবহারের ক্ষেত্রে সঠিক মান খুঁজে পেতে পরীক্ষা করুন।
val brush = Brush.createWithComposeColor(
  family = StockBrushes.pressure(),
  colorIntArgb = Color.Black,
  size = 5F,
  epsilon = 0.1F
)

ব্রাশের বৈশিষ্ট্য পরিবর্তন করুন

আপনি copyWithComposeColor() পদ্ধতি ব্যবহার করে একটি বিদ্যমান ব্রাশের একটি অনুলিপি তৈরি করতে পারেন, যা আপনাকে ব্রাশের যেকোনো বৈশিষ্ট্য পরিবর্তন করতে দেয়।

val redBrush = Brush.createWithComposeColor(
  family = StockBrushes.pressurePen(),
  colorIntArgb = Color.RED,
  size = 5F,
  epsilon = 0.1F
)

val blueBrush = redBrush.copyWithComposeColor(color = Color.BLUE)

কাস্টম ব্রাশ

StockBrushes সাধারণ ব্রাশের একটি বহুমুখী সেট প্রদান করলেও, ইঙ্ক এপিআই অনন্য শৈল্পিক প্রভাবের জন্য সম্পূর্ণ নতুন ব্রাশ আচরণ তৈরি করার জন্য বা পশ্চাদপট সামঞ্জস্যের জন্য নির্দিষ্ট বিদ্যমান ব্রাশগুলির প্রতিলিপি তৈরি করার জন্য একটি উন্নত পথও প্রদান করে।

একটি কাস্টম BrushFamily তার সিরিয়ালাইজড ফর্ম্যাট থেকে লোড করা হয়। প্রয়োজনীয় ফর্ম্যাট হল ব্রাশফ্যামিলি প্রোটোকল বাফারের জিজিপড বাইনারি এনকোডিং। এটি আপনাকে আজ কাস্টম ব্রাশ ফাইল লোড এবং ব্যবহার করতে দেয়। একবার ডিসিরিয়ালাইজড হয়ে গেলে, কাস্টম BrushFamily ব্যবহার করে একটি নির্দিষ্ট রঙ এবং আকারের একটি নতুন Brush তৈরি করা যেতে পারে, ঠিক যেকোনো 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
)