ধারণা এবং জেটপ্যাক কম্পোজ বাস্তবায়ন
অ্যান্ড্রয়েড স্টুডিওতে ভেক্টর অ্যাসেট স্টুডিও নামে একটি টুল রয়েছে যা আপনাকে ম্যাটেরিয়াল আইকন যোগ করতে এবং স্কেলেবল ভেক্টর গ্রাফিক (SVG) ও অ্যাডোবি ফটোশপ ডকুমেন্ট (PSD) ফাইলগুলোকে আপনার প্রোজেক্টে ভেক্টর ড্রয়েবল রিসোর্স হিসেবে ইম্পোর্ট করতে সাহায্য করে। বিটম্যাপের পরিবর্তে ভেক্টর ড্রয়েবল ব্যবহার করলে আপনার APK ফাইলের সাইজ কমে যায়, কারণ ছবির গুণমান নষ্ট না করেই একই ফাইলকে বিভিন্ন স্ক্রিন ডেনসিটির জন্য রিসাইজ করা যায়। অ্যান্ড্রয়েডের পুরোনো সংস্করণগুলোর জন্য, যেগুলো ভেক্টর ড্রয়েবল সাপোর্ট করে না, ভেক্টর অ্যাসেট স্টুডিও বিল্ড করার সময় আপনার ভেক্টর ড্রয়েবলগুলোকে প্রতিটি স্ক্রিন ডেনসিটির জন্য বিভিন্ন আকারের বিটম্যাপে রূপান্তর করতে পারে।
ভেক্টর অ্যাসেট স্টুডিও সম্পর্কে
ভেক্টর অ্যাসেট স্টুডিও প্রজেক্টে একটি ভেক্টর গ্রাফিককে XML ফাইল হিসেবে যুক্ত করে, যা ছবিটির বর্ণনা দেয়। বিভিন্ন রেজোলিউশনের একাধিক রাস্টার গ্রাফিক আপডেট করার চেয়ে একটিমাত্র XML ফাইল রক্ষণাবেক্ষণ করা সহজ হতে পারে।
অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ২০) এবং এর নিচের সংস্করণগুলো ভেক্টর ড্রয়েবল সমর্থন করে না। যদি আপনার সর্বনিম্ন এপিআই লেভেল এই স্তরগুলোর কোনো একটিতে সেট করা থাকে, তাহলে ভেক্টর অ্যাসেট স্টুডিও ব্যবহার করার সময় আপনার কাছে দুটি বিকল্প থাকে: পোর্টেবল নেটওয়ার্ক গ্রাফিক (পিএনজি) ফাইল তৈরি করা (যা ডিফল্ট) অথবা অ্যান্ড্রয়েডএক্স-এর ব্যাকওয়ার্ড কম্প্যাটিবিলিটি কৌশলটি ব্যবহার করা।
পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যতা বজায় রাখার জন্য, ভেক্টর অ্যাসেট স্টুডিও ভেক্টর ড্রয়েবলের রাস্টার ইমেজ তৈরি করে। ভেক্টর এবং রাস্টার ড্রয়েবলগুলো 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' }
কোটলিন
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { implementation("androidx.appcompat:appcompat:1.7.1") }
ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য আপনাকে অবশ্যই AndroidX কোডিং কৌশল ব্যবহার করতে হবে, যেমন ভেক্টর ড্রয়েবলের জন্য android:src অ্যাট্রিবিউটের পরিবর্তে app:srcCompat অ্যাট্রিবিউট ব্যবহার করা। আরও তথ্যের জন্য, AndroidX দেখুন।
একটি লেআউটে ভেক্টর ড্রয়েবল যোগ করা
একটি লেআউট ফাইলে, আপনি ImageButton , ImageView ইত্যাদির মতো যেকোনো আইকন-সম্পর্কিত উইজেটকে একটি ভেক্টর ড্রয়েবলের দিকে নির্দেশ করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত লেআউটটি একটি বাটনে প্রদর্শিত একটি ভেক্টর ড্রয়েবল দেখাচ্ছে:

চিত্র ১। একটি লেআউটের বাটনে প্রদর্শিত একটি ভেক্টর ড্রয়েবল।
একটি উইজেটে ভেক্টর ড্রয়েবল প্রদর্শন করতে, যেমনটি চিত্রে দেখানো হয়েছে:
একটি প্রজেক্ট খুলুন এবং একটি ভেক্টর ড্রয়েবল ইম্পোর্ট করুন ।
এই উদাহরণটিতে নিউ প্রজেক্ট উইজার্ড দিয়ে তৈরি একটি ফোন/ট্যাবলেট প্রজেক্ট ব্যবহার করা হয়েছে।
প্রজেক্ট উইন্ডোর অ্যান্ড্রয়েড ভিউতে ,
content_main.xmlএর মতো একটি লেআউট XML ফাইলে ডাবল-ক্লিক করুন।লেআউট এডিটর প্রদর্শন করতে ডিজাইন ট্যাবে ক্লিক করুন।
প্যালেট উইন্ডো থেকে
ImageButtonউইজেটটি টেনে লেআউট এডিটরের উপর রাখুন।রিসোর্সেস ডায়ালগের বাম প্যানে ড্রয়েবল (Drawable) নির্বাচন করুন এবং তারপরে আপনার ইম্পোর্ট করা ভেক্টর ড্রয়েবলটি নির্বাচন করুন। ওকে (OK ) ক্লিক করুন।
ভেক্টর ড্রয়েবলটি লেআউটের
ImageButtonএ প্রদর্শিত হয়।থিমে নির্ধারিত অ্যাকসেন্ট রঙে ছবির রঙ পরিবর্তন করতে, প্রোপার্টিজ উইন্ডোতে, টিন্ট প্রোপার্টিটি খুঁজুন এবং … এ ক্লিক করুন।
রিসোর্সেস ডায়ালগের বাম প্যানে কালার (Color) নির্বাচন করুন, এবং তারপরে কালারঅ্যাকসেন্ট (colorAccent ) নির্বাচন করুন। ওকে (OK ) ক্লিক করুন।
লেআউটে ছবিটির রঙ অ্যাকসেন্ট রঙে পরিবর্তিত হয়।
প্রজেক্টটি 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" ।
কোডে একটি ভেক্টর ড্রয়েবল উল্লেখ করা
আপনি সাধারণত আপনার কোডে একটি ভেক্টর ড্রয়েবল রিসোর্সকে সাধারণভাবে উল্লেখ করতে পারেন, এবং যখন আপনার অ্যাপটি চলে, তখন এপিআই লেভেলের উপর নির্ভর করে সংশ্লিষ্ট ভেক্টর বা রাস্টার ছবিটি স্বয়ংক্রিয়ভাবে প্রদর্শিত হয়:
বেশিরভাগ ক্ষেত্রে, আপনি XML কোডে
@drawableঅথবা জাভা কোডেDrawableহিসেবে ভেক্টর ড্রয়েবলকে উল্লেখ করতে পারেন।উদাহরণস্বরূপ, নিম্নলিখিত লেআউট XML কোডটি একটি ভিউতে ছবিটি প্রয়োগ করে:
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/myimage" />
নিম্নলিখিত কোডটি ছবিটিকে একটি
Drawableহিসেবে পুনরুদ্ধার করে:কোটলিন
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ক্লাসের বিশেষ বৈশিষ্ট্য ব্যবহার করার প্রয়োজন হয়। এটি করার জন্য, আপনি নিম্নলিখিত কোডের মতো কোড ব্যবহার করতে পারেন:কোটলিন
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val vectorDrawable = drawable as VectorDrawable } else { val bitmapDrawable = drawable as BitmapDrawable }
জাভা
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { VectorDrawable vectorDrawable = (VectorDrawable) drawable; } else { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; }
আপনি শুধুমাত্র প্রধান থ্রেড থেকে ভেক্টর ড্রয়েবল রিসোর্স অ্যাক্সেস করতে পারবেন।
Android 5.0 (API লেভেল 21) এবং তার উপরের সংস্করণগুলির জন্য, আপনি VectorDrawable ক্লাসের প্রোপার্টিগুলিকে অ্যানিমেট করতে AnimatedVectorDrawable ক্লাসটি ব্যবহার করতে পারেন। AndroidX-এর সাথে, Android 3.0 (API লেভেল 11) এবং তার উপরের সংস্করণগুলির জন্য, আপনি VectorDrawable ক্লাসকে অ্যানিমেট করতে AnimatedVectorDrawableCompat ক্লাসটি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, "Animate drawable graphics" দেখুন।