মাল্টি-ডেনসিটি ভেক্টর গ্রাফিক্স যোগ করুন (ভিউ)

ধারণা ও Jetpack Compose-এর প্রয়োগ

Android Studio-তে ভেক্টর অ্যাসেট স্টুডিও নামে একটি টুল আছে যা আপনাকে মেটেরিয়াল আইকন যোগ করতে এবং স্কেলেবল ভেক্টর গ্রাফিক (SVG) ও Adobe Photoshop ডকুমেন্ট (PSD) ফাইল ভেক্টর ড্রয়েবেল রিসোর্স হিসেবে আপনার প্রোজেক্টে ইম্পোর্ট করতে সাহায্য করে। বিটম্যাপের পরিবর্তে ভেক্টর ড্রয়েবেল ব্যবহার করলে আপনার APK-এর সাইজ কমে যায় কারণ ছবির কোয়ালিটি নষ্ট না করেই একই ফাইল বিভিন্ন স্ক্রিন ডেনসিটির জন্য ছোট বড় করা যায়। Android-এর পুরনো ভার্সন যেগুলি ভেক্টর ড্রয়েবেল সাপোর্ট করে না, সেগুলির জন্য ভেক্টর অ্যাসেট স্টুডিও, বিল্ড করার সময়, আপনার ভেক্টর ড্রয়েবেলকে প্রতিটি স্ক্রিন ডেনসিটির জন্য বিভিন্ন বিটম্যাপ সাইজে পরিবর্তন করতে পারে।

ভেক্টর অ্যাসেট স্টুডিও সম্পর্কে

ভেক্টর অ্যাসেট স্টুডিও প্রোজেক্টে ভেক্টর গ্রাফিক যোগ করে, যা XML ফাইল হিসেবে ছবিটির বর্ণনা দেয়। বিভিন্ন রেজোলিউশনে একাধিক রাস্টার গ্রাফিক্স আপডেট করার চেয়ে একটি XML ফাইল ম্যানেজ করা সহজ হতে পারে।

Android 4.4 (API লেভেল ২০) এবং তার আগের ভার্সনে ভেক্টর ড্রয়েবেল কাজ করে না। আপনার ন্যূনতম API লেভেল যদি এইসব API লেভেলের কোনও একটিতে সেট করা থাকে, তাহলে ভেক্টর অ্যাসেট স্টুডিও ব্যবহার করার সময় আপনার কাছে দুটি বিকল্প থাকে: পোর্টেবল নেটওয়ার্ক গ্রাফিক (PNG) ফাইল (ডিফল্ট) তৈরি করা অথবা AndroidX-এ ব্যাকওয়ার্ড কম্প্যাটিবিলিটি টেকনিক ব্যবহার করা।

ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য, ভেক্টর অ্যাসেট স্টুডিও ভেক্টর ড্রয়েবেলের রাস্টার ছবি তৈরি করে। ভেক্টর ও রাস্টার ড্রয়েবল একসাথে APK-তে প্যাকেজ করা হয়। আপনি জাভা কোডে Drawable বা XML কোডে @drawable হিসেবে ভেক্টর ড্রয়েবেল উল্লেখ করতে পারেন; আপনার অ্যাপ রান করলে, API লেভেলের উপর নির্ভর করে সংশ্লিষ্ট ভেক্টর বা রাস্টার ছবি অটোমেটিক দেখানো হয়।

AndroidX-এ ব্যাকওয়ার্ড কম্প্যাটিবিলিটি

এই টেকনিকের জন্য AndroidX 1.0 বা তার পরবর্তী যেকোনও ভার্সন এবং Android Plugin for Gradle 3.2 বা তার পরবর্তী যেকোনও ভার্সন প্রয়োজন এবং এটি শুধু ভেক্টর ড্রয়েবেল ব্যবহার করে। AndroidX-এ VectorDrawableCompat ক্লাস আপনাকে Android 2.1 (API লেভেল 7) এবং তার পরবর্তী ভার্সনে VectorDrawable-এর জন্য সহায়তা প্রদান করতে দেয়।

ভেক্টর অ্যাসেট স্টুডিও ব্যবহার করার আগে, আপনার build.gradle ফাইলে একটি স্টেটমেন্ট যোগ করতে হবে:

গ্ৰুভি

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.7.1'
}

Kotlin

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

dependencies {
    implementation("androidx.appcompat:appcompat:1.7.1")
}

এছাড়াও, ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য আপনাকে AndroidX কোডিং টেকনিক ব্যবহার করতে হবে, যেমন ভেক্টর ড্রয়েবেলের জন্য android:src অ্যাট্রিবিউটের পরিবর্তে app:srcCompat অ্যাট্রিবিউট ব্যবহার করা। আরও তথ্যের জন্য, AndroidX দেখুন।

লেআউটে আঁকা যায় এমন ভেক্টর যোগ করা

লেআউট ফাইলে, আপনি আইকন-সম্পর্কিত যেকোনও উইজেট সেট করতে পারেন, যেমন ImageButton, ImageView এবং আরও অনেক কিছু, যা ভেক্টর ড্রয়েবেলকে নির্দেশ করে। যেমন, নিম্নলিখিত লেআউটে একটি বোতামে ভেক্টর ড্রয়েবেল দেখানো হয়েছে:

ছবি ১. লেআউটে বোতামে দেখানো আঁকা যায় এমন ভেক্টর।

ছবিতে যেমন দেখানো হয়েছে, উইজেটে ভেক্টর ড্রয়েবেল দেখাতে:

  1. কোনও প্রোজেক্ট খুলুন এবং ভেক্টর ড্রয়েবেল ইমপোর্ট করুন।

    এই উদাহরণে, নতুন প্রোজেক্ট উইজার্ডের মাধ্যমে তৈরি করা ফোন/ট্যাবলেট প্রোজেক্ট ব্যবহার করা হয়েছে।

  2. প্রোজেক্ট উইন্ডোর Android ভিউ-তে, লেআউট XML ফাইলে ডবল ক্লিক করুন, যেমন content_main.xml।

  3. লেআউট এডিটর দেখতে ডিজাইন ট্যাবে ক্লিক করুন।

  4. প্যালেট উইন্ডো থেকে ImageButton উইজেটটি টেনে এনে লেআউট এডিটরে রাখুন।

  5. রিসোর্স ডায়ালগে, বাঁদিকের প্যানে ড্রয়েবেল বেছে নিন এবং তারপর আপনার ইমপোর্ট করা ভেক্টর ড্রয়েবেল বেছে নিন। ঠিক আছে বিকল্পে ক্লিক করুন।

    ভেক্টর ড্রয়েবেল লেআউটের ImageButton-এ দেখা যায়।

  6. থিমের মধ্যে উল্লেখ করা অ্যাকসেন্ট কালারে ছবির রঙ পরিবর্তন করতে, প্রপার্টি উইন্ডোতে টিন্ট প্রপার্টি খুঁজে নিয়ে … আইকনে ক্লিক করুন।

  7. রিসোর্স ডায়ালগে, বাঁদিকের প্যানে রঙ বেছে নিন এবং তারপরে colorAccent বেছে নিন। ঠিক আছে বিকল্পে ক্লিক করুন।

    ছবির রঙ লেআউটের অ্যাকসেন্ট কালারে পরিবর্তিত হয়।

প্রজেক্টে AndroidX ব্যবহার করা হলে, ImageButton কোডটি নিম্নলিখিত কোডের মতো হতে হবে:

<ImageButton
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_build_black_24dp"
  tools:layout_editor_absoluteX="11dp"
  tools:layout_editor_absoluteY="225dp"
  android:id="@+id/imageButton"
  android:tint="@color/colorAccent" />

প্রোজেক্টে AndroidX ব্যবহার না করা হলে, ভেক্টর ড্রয়েবেল কোড পরিবর্তে android:src="@drawable/ic_build_black_24dp" হবে।

কোডে আঁকা যায় এমন ভেক্টরকে রেফার করা হচ্ছে

আপনি সাধারণত আপনার কোডে জেনেরিক উপায়ে ভেক্টর ড্রয়েবেল রিসোর্স রেফার করতে পারেন এবং আপনার অ্যাপ রান করলে, API লেভেলের উপর নির্ভর করে সংশ্লিষ্ট ভেক্টর বা রাস্টার ইমেজ অটোমেটিক দেখানো হয়:

  • বেশিরভাগ ক্ষেত্রে, আপনি XML কোডে @drawable বা জাভা কোডে Drawable হিসেবে ভেক্টর ড্রয়েবেল উল্লেখ করতে পারেন।

    যেমন, নিম্নলিখিত লেআউট XML কোডটি কোনও ভিউতে ছবি প্রয়োগ করে:

    <ImageView
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:src="@drawable/myimage" />

    নিম্নলিখিত কোডটি Drawable হিসেবে ছবি ফিরিয়ে আনে:

    Kotlin

    val drawable = resources.getDrawable(R.drawable.myimage, theme)

    জাভা

    Resources res = getResources();
    Drawable drawable = res.getDrawable(R.drawable.myimage, getTheme());

    getResources() পদ্ধতিটি Context ক্লাসে থাকে, যা অ্যাক্টিভিটি, ফ্র্যাগমেন্ট, লেআউট, ভিউ ইত্যাদির মতো UI অবজেক্টের ক্ষেত্রে প্রযোজ্য।

  • আপনার অ্যাপ যদি AndroidX ব্যবহার করে (এমনকি আপনার build.gradle ফাইলে vectorDrawables.useSupportLibrary = true স্টেটমেন্ট না থাকলেও), আপনি app:srcCompat স্টেটমেন্ট সহ ভেক্টর ড্রয়েবেলও উল্লেখ করতে পারেন। যেমন:

    <ImageView
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      app:srcCompat="@drawable/myimage" />
  • মাঝে মাঝে, আপনাকে ড্রয়েবল রিসোর্সকে তার সঠিক ক্লাসে টাইপকাস্ট করতে হতে পারে, যেমন যখন আপনাকে VectorDrawable ক্লাসের নির্দিষ্ট ফিচার ব্যবহার করতে হবে। এটি করতে, আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

    Kotlin

    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) {
      val vectorDrawable = drawable as VectorDrawable
    } else {
      val bitmapDrawable = drawable as BitmapDrawable
    }

    জাভা

    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) {
      VectorDrawable vectorDrawable = (VectorDrawable) drawable;
    } else {
      BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    }

আপনি শুধুমাত্র মূল থ্রেড থেকে ভেক্টর ড্রয়েবেল রিসোর্স অ্যাক্সেস করতে পারবেন।

Android 5.0 (API লেভেল ২১) এবং তার পরবর্তী যেকোনও ভার্সনের জন্য, আপনি VectorDrawable ক্লাসের প্রপার্টি অ্যানিমেট করতে AnimatedVectorDrawable ক্লাস ব্যবহার করতে পারবেন। AndroidX-এর সাহায্যে, আপনি Android 3.0 (API লেভেল ১১) এবং তার পরবর্তী যেকোনও ভার্সনের জন্য VectorDrawable ক্লাস অ্যানিমেট করতে AnimatedVectorDrawableCompat ক্লাস ব্যবহার করতে পারবেন। আরও তথ্যের জন্য, অ্যানিমেট ড্রয়েবল গ্রাফিক্স দেখুন।