অ্যাডাপ্টিভ আইকন প্রয়োগ করা

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

ডিভাইস ইমপ্লিমেন্টাররা একটি ডিভাইস মাস্ক প্রদান করে যা ডিভাইসের সমস্ত আইকনের আকার নির্ধারণ করবে। এই আইকনটি সেইসব সিস্টেম UI সারফেসে ব্যবহার করা হবে যেগুলি লঞ্চার আইকন ব্যবহার করে (যেমন, লঞ্চার, ওভারভিউ, সেটিংস ও শেয়ার শিট)।

উদাহরণ ও সোর্স

কোডের উদাহরণ:

  • platform/development/samples/AdaptiveIconSample/

ডেভেলপার ডকুমেন্টেশন:

সোর্স কোড:

  • platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java

প্রয়োগ

কোনও প্ল্যাটফর্মে আইকনের আকার পরিবর্তন করতে, নিম্নলিখিত উপায়ে framework/base/core/res/res/values/config.xml-এ একটি স্ট্রিং ওভারলে করুন:

<!-- Specifies the path that is used by AdaptiveIconDrawable class to crop launcher icons. -->
    <string name="config_icon_mask" translatable="false">"M50,0L100,0 100,100 0,100 0,0z"</string>

স্ট্রিংয়ের ফর্ম্যাট ও সিনট্যাক্স পাথ ডেফিনিশনের জন্য W3, SVG স্ট্যান্ডার্ডমেনে চলে। PathData-র এই ফর্ম্যাটটি Android ভেক্টর ড্রয়েবল ও কাজ করে।

এই পাথটি কনভেক্স হতে হবে এবং ভিউ বাউন্ডের মধ্যে সেফজোন (৬৬/৭১ = ৯১%) মেনে চলতে হবে। এটি একটি CTS টেস্টে এনফোর্স করা হয়।

আপনি যদি প্ল্যাটফর্ম মাস্ক হিসেবে একটি বৃত্ত ব্যবহার করার সিদ্ধান্ত নেন, তাহলে config_useRoundIcon = true ওভারলে করতে ভুলবেন না। না হলে, এই কনফিগারেশন ভ্যালু ফলস হিসেবে সেট করুন অথবা এই কনফিগারেশন ভ্যালু নির্দিষ্ট করবেন না।

Adaptive Icon API

AdaptiveIconDrawable ক্লাসের API নিচে দেখানো হয়েছে:

package  android.graphics.drawable;
    public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback {
    method public Drawable getBackground();
    method public Drawable getForeground();
    method public Path getIconMask();
    method public Region getSafeZone();
    method public float getExtraInsetFraction();
    method public int getOpacity();
    method public void invalidateDrawable(Drawable);
    method public void scheduleDrawable(Drawable, Runnable, long);
    method public void setAlpha(int);
    method public void setColorFilter(ColorFilter);
    method public void setOpacity(int);
    method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
    }
public class Icon extends Parceleable {
    method public Bitmap createWithAdaptiveBitmap();
    }

রেফারেন্স প্রয়োগ করা

যেকোনও সিস্টেম UI সারফেসে স্ট্যাটিক অ্যাডাপ্টিভ আইকন রেন্ডার করার জন্য কিছু করতে হবে না। PackageManager কোনও ড্রয়েবল রিটার্ন করলে, সেটি ImageView-এর সাথে বাইন্ড করুন। Pre-O প্ল্যাটফর্মে আইকনগুলি আগে থেকেই এইভাবে রেন্ডার করা হয়।

ডায়নামিক মোশন এফেক্ট রেন্ডার করা প্রসঙ্গে, Launcher3 (platform/packages/apps/Launcher3)-এ একটি রেফারেন্স প্রয়োগ থাকবে যা দেখাবে যে O-MR1-এ কীভাবে এফেক্ট পাওয়া যায়।

যাচাইকরণ

প্রয়োগ করা ঠিক হয়েছে কিনা তা যাচাই করতে, নিজের পছন্দমতো মাস্ক ওভাররাইড করার পরে, Launcher3, সেটিংস, ওভারভিউ ও সেটিংসে আইকন সঠিকভাবে দেখা যাচ্ছে কিনা তা চেক করুন। এছাড়াও, আপনি AdaptiveIconDrawableTest.java এবং AdaptiveIconMaskTest.java গ্রাফিক্স CTS TestCase-এর মধ্যে রান করে ইমপ্লিমেন্টেশন টেস্ট করতে পারেন।

সাজেস্ট করা ম্যানুয়াল টেস্ট কেস এখানে পাওয়া যাবে: platform/development/samples/AdaptiveIconSample/.

পরিচিত সমস্যা

পরিচিত সমস্যার মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:

  • মাস্ক পাথ কীভাবে ডিফাইন করা হয়েছে তার উপর নির্ভর করে আইকন অস্পষ্ট হয়ে যেতে পারে।
  • অ্যাপ ডেভেলপাররা Icon.createWithAdaptiveBitmap() পদ্ধতি ব্যবহার না করলে অথবা এই পদ্ধতি সঠিকভাবে ব্যবহার না করলে জুম-ইন করা শর্টকাট আইকন। এই পদ্ধতি সঠিকভাবে কাজ করার জন্য, পাস করা বিটম্যাপটি চারপাশে ২৫% প্যাডিং সহ হতে হবে।

এইসব সমস্যার সমাধান এইভাবে করা যেতে পারে:

  • মাস্ক [০, ১০০] x [০, ১০০] কোঅর্ডিনেট সিস্টেমে সংজ্ঞায়িত করতে হবে।
  • অ্যাডাপ্টিভ আইকনের (লঞ্চার আইকন , শর্টকাট) জন্য ব্যবহার করা ছবিতে চারদিকে পর্যাপ্ত প্যাডিং (২৫%) আছে কিনা তা নিশ্চিত করুন।