موادی که شما طراحی می کنید

با شروع از اندروید ۱۲، طراحی متریال یو (Material You design) بر بیان و روان بودن در سیستم عامل اندروید تمرکز دارد، با هدف کمک به کاربران برای ایجاد و داشتن یک تجربه واحد و منسجم که نیازهای آنها را برآورده می‌کند. به عنوان یک شریک اندروید، از شما دعوت می‌شود تا طراحی متریال یو را در زمینه‌های زیر در دستگاه‌های اندروید خود بگنجانید:

  • رنگ پویا
  • حرکت
  • ابزارک‌ها

رنگ پویا

رنگ پویا، محور طراحی Material You و بخش کلیدی استراتژی چند ساله اندروید برای ارائه سفارشی‌سازی ساده‌تر و عمیق‌تر به کاربرانش است، به شیوه‌ای که هیچ دستگاه دیگری این کار را انجام نمی‌دهد. Material You موارد زیر را ارائه می‌دهد:

  • کاربران و توسعه‌دهندگان، داستانی غنی و مداوم از شخصی‌سازی موجود در هر دستگاه اندرویدی را تجربه می‌کنند.

  • فرصت‌هایی برای تولیدکنندگان اصلی تجهیزات اندروید تا به نوآوری در رابط کاربری سیستم و برنامه‌های شخص اول خود به شیوه‌ای که با سخت‌افزار و رنگ، ساخت و شکل برندشان هماهنگ باشد، ادامه دهند.

برای بهره‌مندی از رنگ پویا، از داستان استخراج رنگ Android 12 Material You به عنوان بخش کلیدی نرم‌افزار خود که به کاربران ارائه می‌دهید، استفاده کنید. در دستگاه، از منطق استخراج رنگ موجود در AOSP استفاده کنید، به خصوص منطقی که یک رنگ منبع تصویر زمینه یا تم را دریافت کرده و آن را از طریق 65 API رنگ خروجی می‌دهد. برای الزامات رنگ پویا، به بخش «استفاده از رنگ پویا» مراجعه کنید.

جریان کامل رنگ پویا شامل چهار مرحله است، همانطور که در زیر نشان داده شده است:

جریان رنگ مواد

شکل ۱. جریان رنگ پویای متریال یو

  1. کاربر تصویر زمینه یا تم را از طریق انتخابگر OEM تغییر می‌دهد.

  2. کاربر یکی از موارد زیر را انتخاب می‌کند:

    • تم دستگاه. وقتی این انتخاب انجام شود، اندروید به‌طور خودکار یک رنگ منبع واحد را که مطابق با الزامات است، انتخاب می‌کند.

    • تصویر زمینه جدید + تم. وقتی انتخاب شود، منطق AOSP به طور خودکار یک رنگ منبع واحد را از تصویر زمینه انتخاب شده انتخاب می‌کند.

  3. AOSP طبق منطق AOSP، یک منبع رنگ واحد را به ۵ پالت رنگی با ۱۳ نوع رنگ رنگی در هر پالت گسترش می‌دهد که سپس ۶۵ ویژگی رنگی را در خود جای می‌دهند.

  4. رابط کاربری برنامه از ۶۵ ویژگی رنگی به گونه‌ای استفاده می‌کند که در سراسر اکوسیستم برنامه‌های اندروید سازگار باشد. توصیه می‌شود از پالت رنگی یکسانی برای رابط کاربری سیستم دستگاه و برنامه‌های خاص تولیدکنندگان اصلی (OEM) استفاده کنید.

وصله‌های اندروید ۱۲

برای دریافت منطق سرتاسری برای استخراج رنگ تصویر زمینه و فعال کردن دستگاه برای پر کردن APIهای ۶۵ رنگی به روشی که با اکوسیستم سازگار باشد، وصله‌های زیر را در پیاده‌سازی اندروید ۱۲ خود لحاظ کنید:

تعیین رنگ‌های سفارشی در ThemePicker

اگر از برنامه AOSP ThemePicker استفاده می‌کنید، برنامه WallpaperPicker در صورت برآورده شدن هر دو شرط زیر، بخش رنگ را نشان می‌دهد:

  • flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml true است.
  • یک فایل APK سیستمی با نام بسته در themes_stub_package در فایل packages/apps/ThemePicker/res/values/override.xml تعریف شده است.

فرمت APK خرد

یک نسخه نمونه از این APK را می‌توانید در packages/apps/ThemePicker/themes پیدا کنید.

این APK باید فقط شامل منابعی باشد که جزئیات رنگ‌های پایه موجود و نام آنها را شرح دهد.

این مقاله باید حاوی یک فایل XML تحت res/xml با فرمت زیر باشد:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="color_bundles">
        <item>color1</item>
        <item>color2</item>
        <item>color3</item>
        <item>color4</item>
    </array>

    <string name="bundle_name_color1">Blue</string>
    <string name="bundle_name_color2">Red</string>
    <string name="bundle_name_color3">Yellow</string>
    <string name="bundle_name_color4">Green</string>

</resources>

در این فایل، هر item درون color_bundles نام مشخصی دارد، مادامی که رشته‌های زیر به bundle_name_ item نامگذاری شوند.

برای هر رنگ باید یک رشته bundle_name_ item به همراه یک نام توصیفی برای هر رنگ وجود داشته باشد. این موارد را می‌توان با اضافه کردن رشته‌های ترجمه شده مربوطه به دایرکتوری‌های res/values- language code ترجمه کرد.

مقادیر رنگ واقعی می‌توانند یا در همان XML یا در یک فایل XML منابع جداگانه با فرمت زیر باشند:

<resources>
    <color name="color_primary_color1">#0000FF</color>
    <color name="color_secondary_color1">#0000FF</color>

    <color name="color_primary_color2">#ff0000</color>
    <color name="color_secondary_color2">#ff0000</color>

    <color name="color_primary_color3">#ffff00</color>
    <color name="color_secondary_color3">#ffff00</color>

    <color name="color_primary_color4">#00ff00</color>
    <color name="color_secondary_color4">#00ff00</color>
</resources>

برای هر آیتم در آرایه color bundles، باید یک ورودی color_primary_ item و یک ورودی color_secondary_ item وجود داشته باشد (و هر دو رنگ باید همرنگ باشند). مقادیر این ورودی‌های color کدهای رنگ واقعی برای هر رنگ هستند که در بخش رنگ پایه نمایش داده می‌شوند.

مرحله ۱: یک تجربه قالب‌بندی کاربر ایجاد کنید

انتخابگر تم جایی است که کاربران با قابلیت‌های جدید شخصی‌سازی Material You درگیر می‌شوند و می‌توانند بین گزینه‌های رنگ یا تنظیمات از پیش تعیین‌شده انتخاب کنند. از آنجایی که این گزینه با محصول و جمعیت کاربر شما مطابقت دارد، می‌توانید با استفاده از انتخابگر تم یا انتخابگر تصویر زمینه ، شخصی‌سازی و تجربه رنگی غنی‌تری را به کاربران ارائه دهید.

  • هنگام استفاده از انتخابگر تصویر زمینه، استخراج رنگ تصویر زمینه به طور پیش‌فرض فعال است. با این حال، می‌توانید انتخابگر را سفارشی‌سازی کنید تا گزینه‌های بیشتری در اختیار کاربر قرار گیرد.

مرحله ۲: استخراج رنگ تصویر زمینه به یک رنگ منبع

برای فعال کردن استخراج رنگ تصویر زمینه، پچ‌های اندروید ۱۲ که در بالا ذکر شده است را انتخاب کنید (این قابلیت به طور پیش‌فرض در نسخه‌های بعدی AOSP فعال خواهد شد). منطق AOSP که استخراج تصویر زمینه را فعال می‌کند، از frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java ، روی ThemeOverlayController#mOnColorsChangedListener ، از طریق WallpaperManager#onWallpaperColorsChanged شروع می‌شود. توصیه می‌کنیم برای اطمینان از یک تجربه توسعه پایدار، از منطق AOSP اصلاح نشده استفاده کنید.

به طور پیش‌فرض، منطق، رنگی را انتخاب می‌کند که بالاترین فرکانس را دارد و برای استفاده مناسب است. برای بهره‌گیری از سایر رنگ‌های منبع که توسط الگوریتم بازگردانده می‌شوند و ارائه آن رنگ‌ها به کاربران در انتخابگر تم، از ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

برای اینکه یک رنگ منبع (چه از تصویر زمینه استخراج شده باشد و چه از پیش تعیین شده توسط کاربر) مناسب برای استفاده باشد، باید حداقل مقدار کرومای CAM16 برابر با ۵ داشته باشد؛ این امر تضمین می‌کند که رنگ منبع هنگام تبدیل از یک رنگ واحد به ۶۵ رنگ تونال، تحت تأثیر تُن‌های تیره ظریف قرار نگیرد و نمایانگر انتخاب کاربر باقی بماند. برای خواندن و اصلاح رنگ‌ها در CAM16، از Cam#fromInt یا Cam#getInt استفاده کنید.

استفاده از پالت رنگ غیر پویا برای دستگاه‌هایی که از استخراج رنگ تصویر زمینه پشتیبانی نمی‌کنند، می‌توانید با انجام موارد زیر از نمایش عالی برنامه‌های گوگل و برنامه‌های شخص ثالث که از رنگ پویا پشتیبانی می‌کنند، اطمینان حاصل کنید:

  • با غیرفعال کردن flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml از پالت متریال پیش‌فرض استفاده کنید.
  • اطمینان حاصل کنید که کاربران هنوز هم می‌توانند سیستم عامل خود را با استفاده از یک انتخابگر تم از پیش تعیین شده شخصی‌سازی کنند.

مرحله ۳: رنگ منبع را به APIهای رنگ بسط دهید

با استفاده از رنگ منبع واحد مشتق شده از مرحله قبل، اندروید ۵ پالت تُن منحصر به فرد (رنگ‌های برجسته ۱-۳، رنگ‌های خنثی ۱-۲) تولید می‌کند که هر پالت شامل ۱۳ رنگ و هر رنگ شامل مقادیر روشنایی مختلف (۰ تا ۱۰۰۰) است و در مجموع ۶۵ رنگ می‌شود. منطق ارائه شده در پچ‌های اندروید ۱۲، این بسط رنگ را به درستی پیاده‌سازی می‌کند. جزئیات ارائه شده در زیر، پیاده‌سازی را شرح می‌دهد.

برای ثبات در ظاهر، ۵ پالت تُن (accent1، accent2، accent3، neutral1، neutral2) و ۱۳ رنگ متناظر آنها باید بر اساس رنگ منبع واحد با تغییرات مربوطه در مقادیر کروما و رنگ CAM16 مطابق با موارد زیر باشند:

  • system_accent1

    • کروما: برای رنگ‌هایی که به ۰ ، ۱۰ ، ۵۰ و ۱۰۰ ختم می‌شوند از «۴۰» و در غیر این صورت از «۴۸» استفاده کنید.
    • رنگ: همان منبع
  • system_accent2

    • کروما: از عدد "16" استفاده کنید
    • رنگ: همان منبع
  • system_accent3

    • کروما: از عدد "۳۲" استفاده کنید
    • رنگ: چرخش ۶۰ درجه مثبت
  • system_neutral1

    • کروما: از عدد "4" استفاده کنید
    • رنگ: همان منبع
  • system_neutral2

    • کروما: از عدد "8" استفاده کنید
    • رنگ: همان منبع

CTS شامل تست‌هایی برای اعتبارسنجی فراخوانی‌های API مربوط به روشنایی و رنگ است. برای اجرا، atest SystemPalette استفاده کنید.

مرحله ۴: از رنگ‌های پویا در برنامه‌ها و رابط کاربری سیستم استفاده کنید

پس از تنظیم رنگ‌های پویا روی دستگاه، برنامه‌ها برای استفاده از رنگ‌ها از دستورالعمل‌های Material پیروی می‌کنند. دستورالعمل‌های Material قرار است تا ۲۶ اکتبر ۲۰۲۱ در material.io منتشر شوند تا برنامه‌های شخص ثالث بتوانند از آنها استفاده کنند. برای رابط کاربری سیستم و برنامه‌های شخص ثالث، اکیداً توصیه می‌کنیم رنگ‌های پویا را در سراسر تجربه کاربری به گونه‌ای ادغام کنید که با سخت‌افزار و برند شما متناسب باشد و به شما در تمایز دستگاه‌هایتان کمک کند.

برای راهنمایی کلی در مورد رنگ‌های پویا، به موارد زیر مراجعه کنید:

  • از رنگ‌های تأکیدی برای عناصر پیش‌زمینه در برنامه‌ها و رابط کاربری سیستم استفاده کنید:

    @android:color/system_accent1_0  1000 // most-used foreground color group
    @android:color/system_accent2_0  1000 // alternate accent, used for surfaces
    @android:color/system_accent3_0  1000 // playful, analogous color
    
  • از رنگ‌های خنثی برای عناصر پس‌زمینه در برنامه‌ها و رابط کاربری سیستم استفاده کنید:

    @android:color/system_neutral1_0  1000 // most-used background color group
    @android:color/system_neutral2_0  1000 // used for higher-elevation surfaces
    

برای اطلاعات بیشتر در مورد نحوه نگاشت رنگ‌ها توسط Material You و نحوه استفاده از APIها در SysUI، به منابع اضافی مراجعه کنید.

مرحله 5: گزینه‌های رنگ پویا را در پیاده‌سازی AOSP WallpaperPicker خود اضافه کنید

برای اندروید ۱۳ و بالاتر بسازید

با شروع از اندروید ۱۳، android.theme.customization.accent_color منسوخ شده است. یک ویژگی جدید android.theme.customization.theme_style برای پشتیبانی از انواع رنگ‌های مختلف اضافه شده است. در حال حاضر چهار نوع رنگ در کدبیس به شرح زیر داریم:

TONAL_SPOT = Default Material You theme since Android S.
VIBRANT = Theme where accent 2 and 3 are analogous to accent 1.
EXPRESSIVE = Highly chromatic theme.
SPRITZ = Desaturated theme, almost grayscale.

این موارد به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال می‌شوند، همانطور که در JSON زیر نشان داده شده است:

{
    "android.theme.customization.system_palette":"B1611C",
    "android.theme.customization.theme_style":"EXPRESSIVE"
}

برای اندروید ۱۲ و پایین‌تر بسازید

هنگام استفاده از انتخابگر تم سفارشی، دستگاه باید با ارائه یک فایل JSON با فرمت زیر (که در آن 746BC1 یک نمونه رنگ منبع معتبر است)، یک رنگ منبع معتبر را به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال کند:

{
      "android.theme.customization.system_palette":"746BC1",
      "android.theme.customization.accent_color":"746BC1"
}

انجام این کار، استخراج رنگ تصویر زمینه (مرحله ۲) را حذف می‌کند و مستقیماً رنگ منبع ارائه شده را به ۶۵ ویژگی رنگی گسترش می‌دهد (مرحله ۳).

مرحله 6: ثبت تیکت

علاوه بر یکپارچه‌سازی سیستم، شما باید یک تیکت ثبت کنید و نام تجاری خود ( Build.MANUFACTURER ) را به ما اطلاع دهید. از آنجایی که اکثر برنامه‌های شخص ثالث از کامپوننت‌های متریال برای اندروید برای نمایش رنگ‌های پویا استفاده می‌کنند، ما از یک لیست مجاز کدگذاری شده استفاده می‌کنیم تا بگوییم کدام دستگاه‌ها ویژگی پالت‌های رنگ پویا را ادغام کرده‌اند.

حرکت

حرکت روان باعث می‌شود دستگاه‌ها مدرن و باکیفیت به نظر برسند. برای ایجاد و حفظ اعتماد و رضایت توسعه‌دهندگان، overscroll و ripple دو بخش کلیدی حرکت روان هستند که باید از نظر ظاهری و حسی سازگار باشند.

استفاده از overscroll در سیستم عامل شما

اندروید ۱۲ شامل یک حرکت پیمایش پویاتر و واکنش‌گراتر به شکل کشش نما است که وقتی کاربر سعی می‌کند از لبه یک لیست عبور کند، نشان داده می‌شود. مثالی در زیر نشان داده شده است:

مطالبی که اسکرول می‌کنید

شکل ۲. افکت اسکرول اندروید ۱۲، همانطور که در تنظیمات نشان داده شده است

برای هماهنگی بیشتر بین توسعه‌دهندگان، مطمئن شوید که تأثیر کلی پیمایش بیش از حد در دستگاه‌های شما مشابه موارد زیر باشد:

  • در دستگاه‌هایی که برای ActivityManager.isHighEndGfx() مقدار true برمی‌گردانند، اثر overscroll به صورت کشش غیرخطی صفحه نمایش است (مطابق شکل بالا).

  • در دستگاه‌های با عملکرد پایین‌تر، اثر کشش به یک کشش خطی ساده می‌شود (تا بار روی سیستم کاهش یابد).

استفاده از overscroll در برنامه‌های شخص ثالث

هنگام استفاده از نماهای سفارشی، ممکن است لازم باشد برخی از برنامه‌ها و رابط کاربری سیستم را که از جلوه کششی استفاده می‌کنند، تغییر دهید.

  • برای پشتیبانی از پیمایش کششی، کتابخانه‌ها را به جدیدترین نسخه ارتقا دهید:

    • androidx.recyclerview:recyclerview:1.3.0-alpha01 برای RecyclerView
    • androidx.core:core:1.7.0-alpha01 برای NestedScrollView و EdgeEffectCompat
    • androidx.viewpager:viewpager:1.1-alpha01 برای ViewPager
  • برای طرح‌بندی‌های سفارشی که EdgeEffect استفاده می‌کنند، تغییرات UX زیر را در نظر بگیرید:

    • با قابلیت اسکرول کششی، کاربران نباید در حین کشیده شدن طرح‌بندی با محتوای آن تعامل داشته باشند. کاربران باید فقط خودِ کشش را دستکاری کنند و مثلاً نتوانند دکمه‌ای را در محتوا فشار دهند.

    • وقتی کاربران هنگام اجرای انیمیشن EdgeEffect ، محتوا را لمس می‌کنند، باید انیمیشن را دریافت کرده و اجازه داشته باشند میزان کشش را دستکاری کنند. مقدار فعلی pull از EdgeEffectCompat.getDistance() قابل دسترسی است.

    • برای دستکاری مقدار pull و بازگرداندن مقدار مصرف شده، از onPullDistance() استفاده کنید. این به توسعه‌دهندگان اجازه می‌دهد تا به راحتی از حالت کشش به پیمایش تغییر حالت دهند، زیرا انگشت محتوا را از موقعیت شروع خارج می‌کند و از حالت کشش خارج می‌کند.

    • هنگام کار با پیمایش تو در تو، اگر محتوا کشیده شود، کشش باید قبل از محتوای تو در تو، حرکت لمسی را مصرف کند، در غیر این صورت ممکن است هنگام تغییر جهت انگشت به جای رها کردن کشش، پیمایش تو در تو انجام شود.

برای جزئیات بیشتر در مورد پیمایش بیش از حد، به «متحرک کردن حرکت پیمایش» مراجعه کنید.

استفاده از موج (بازخورد لمسی) در سیستم عامل شما

اندروید ۱۲ شامل یک موج لمسی نرم‌تر و ظریف‌تر است تا هنگام لمس کردن، بازخوردی را به کاربران ارائه دهد.

ماده‌ای که موج می‌زنید

شکل ۳. افکت موج‌دار اندروید ۱۲، با انیمیشن پرکننده‌ی نرم‌تر

برای پیش‌بینی‌پذیری توسعه‌دهندگان و ارائه یک تجربه کاربری عالی، اطمینان حاصل کنید که اثر موجی روی دستگاه‌های شما مشابه مثال نشان داده شده در بالا باشد. در حالی که نیازی به انجام مراحل ادغام خاصی برای پشتیبانی از اثرات موجی ندارید، باید این اثر را روی دستگاه‌های خود آزمایش کنید تا هرگونه رگرسیون ناخواسته‌ای که در پیاده‌سازی شما ایجاد شده است را بررسی کنید.

ابزارک‌ها

ویجت‌ها اجزای کلیدی یک دستگاه اندرویدی هستند. اندروید ۱۲ شامل APIها و قابلیت‌های API جدیدی است که همه تولیدکنندگان اصلی تجهیزات (OEM) باید از آنها پشتیبانی کنند.

منابع اضافی

استفاده از رنگ SysUI

(accent1 = A1، accent2 = A2، accent3 = A3، neutral1 = N1، neutral2 = N2)

موادی که برای رنگ آمیزی استفاده می کنید

شکل ۴. استفاده از رنگ‌های پویا در رابط کاربری سیستم

به‌روزرسانی‌های ویژگی‌های رنگ کتابخانه مواد

متریال در نسخه بعدی، با ایجاد نقش‌های رنگی که برای تأمین رنگ نماهای خاص استفاده می‌شوند، ویژگی‌های تم خود را به‌روزرسانی خواهد کرد.

نقش رنگ ویژگی تم اندروید تم روشن
رنگ پویا
تم تیره
رنگ پویا
اولیه رنگاولیه system_accent1_600 system_accent1_200
در مقطع ابتدایی رنگ در حالت اولیه system_accent1_0 system_accent1_800
ثانویه رنگ ثانویه system_accent2_600 system_accent2_200
در ثانویه colorOnSecondary system_accent2_0 system_accent2_800
خطا خطای رنگ ناموجود (red_600) ناموجود (red_200)
در مورد خطا خطای رنگ ناموجود (سفید) ناموجود (red_900)
پیشینه اندروید:رنگ پس‌زمینه سیستم_خنثی1_10 system_neutral1_900
در پس‌زمینه رنگ روی پس‌زمینه system_neutral1_900 سیستم_خنثی1_100
سطح رنگسطح سیستم_خنثی1_10 system_neutral1_900
روی سطح رنگ روی سطح system_neutral1_900 سیستم_خنثی1_100

متریال ویژگی‌های حالت‌های خود را با اشاره‌گرهای زیر به‌روزرسانی خواهد کرد:

نقش رنگ ویژگی تم اندروید تم روشن
رنگ پویا
تم تیره
رنگ پویا
محتوای حالت اولیه رنگحالت اولیهمحتوای system_accent1_700 system_accent1_200
لایه حالت اولیه لایه حالت اولیه رنگ system_accent1_600 system_accent1_300
محتوای حالت ثانویه محتوای وضعیت ثانویه رنگ system_accent2_700 system_accent2_200
لایه حالت ثانویه لایه حالت ثانویه رنگ system_accent2_600 system_accent2_300
در مورد محتوای حالت اولیه colorOnPrimaryStateContent system_accent1_0 system_accent1_800
روی لایه حالت اولیه لایه وضعیت رنگ اولیه system_accent1_900 system_accent1_800
در مورد محتوای حالت ثانویه colorOnSecondaryStateContent system_accent2_0 system_accent2_800
در لایه حالت ثانویه لایه حالت رنگ در ثانویه system_accent2_900 system_accent2_800
روی محتوای وضعیت کانتینر اصلی colorOnPrimaryContainerStateContent system_accent1_900 system_accent1_900
در لایه حالت کانتینر اصلی colorOnPrimaryContainerStateLayer system_accent1_900 system_accent1_900
روی محتوای وضعیت کانتینر ثانویه colorOnsecondaryContainerStateContent system_accent2_900 system_accent2_900
در لایه حالت کانتینر ثانویه colorOnSecondaryContainerStateLayer system_accent2_900 system_accent2_900
در مورد محتوای حالت کانتینر ثالثیه colorOnTertiaryContainerStateContent system_accent3_900 system_accent3_900
در لایه حالت کانتینر ثالثیه colorOnTertiaryContainerStateLayer system_accent3_900 system_accent3_900
محتوای حالت سطحی colorOnSurfaceStateContent system_neutral1_900 سیستم_خنثی1_100
روی لایه حالت سطحی لایه حالت روی سطح (colorOnSurfaceStateLayer) system_neutral1_900 سیستم_خنثی1_100
محتوای حالت متغیر روی سطح colorOnSurfaceVariantStateContent سیستم_خنثی_2_700 سیستم_خنثی_2_200
لایه حالت متغیر روی سطح colorOnSurfaceVariantStateLayer سیستم_خنثی_2_700 سیستم_خنثی_2_200
محتوای وضعیت خطا colorErrorStateContent قرمز800 قرمز۲۰۰

سوالات متداول

استخراج رنگ

وقتی کاربر تصویر زمینه را تغییر می‌دهد، آیا استخراج رنگ به طور خودکار انجام می‌شود یا باید از جایی فعال شود؟

با وصله‌های اندروید ۱۲ ، استخراج رنگ تصویر زمینه به طور پیش‌فرض فعال است.

ThemeOverlayController.java منطق را با ThemeOverlayController#mOnColorsChangedListener و WallpaperManager#onWallpaperColorsChanged فعال می‌کند.

برای والپیپرهای زنده یا والپیپرهای ویدیویی ، آیا می‌توانیم بفهمیم که قابلیت استخراج رنگ چه زمانی رنگ را از صفحه نمایش می‌گیرد؟ برخی از کاربران ممکن است رنگ‌های آخرین فریم را بخواهند، زیرا در بیشترین زمان نمایش داده می‌شود.

استخراج رنگ زمانی آغاز می‌شود که کاربر تصویر زمینه را تنظیم می‌کند یا پس از چرخه روشن/خاموش شدن صفحه نمایش (در پاسخ به WallpaperEngine#notifyColorsChanged ). آخرین رویداد WallpaperColors (از تصویر زمینه زنده) پس از خاموش و روشن کردن مجدد صفحه توسط کاربر اعمال می‌شود.

انتخابگر تم/تصویر زمینه

چگونه می‌توانم انتخابگر تم را طوری فعال کنم که چندین رنگ منبع را به جز رنگی که بیشترین تکرار را دارد، برای انتخاب کاربران نشان دهد؟ آیا راهی وجود دارد که آن رنگ‌ها را از منطق استخراج دریافت کنم؟

بله. در انتخابگر تم خود، می‌توانید ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

یک ویژگی در نام‌های پیکسل به عنوان آیکون‌های تم‌دار وجود دارد. آیا این ویژگی در سه پچی که به اشتراک گذاشته‌اید، گنجانده شده است؟ تولیدکنندگان اصلی تجهیزات (OEM) چگونه می‌توانند آن را پیاده‌سازی کنند؟

خیر. آیکون‌های دارای تم در نسخه بتا هستند و در اندروید ۱۲ در دسترس نیستند.

آیا راهی وجود دارد که بتوان از برنامه‌ی تصویر زمینه‌ی گوگل با قابلیت استخراج و انتخاب رنگ استفاده کرد؟

بله. این ویژگی‌ها را می‌توان با دنبال کردن مراحل ادغام که قبلاً در این صفحه توضیح داده شده است، در آخرین نسخه برنامه Google Wallpaper پیاده‌سازی کرد.

برای اطلاعات بیشتر با TAM خود تماس بگیرید.

آیا گوگل می‌تواند برنامه یا کد منبع را به اشتراک بگذارد تا تولیدکنندگان اصلی تجهیزات بتوانند نسخه خودشان از پیش‌نمایش رنگ پویا را در منوی تنظیمات خود پیاده‌سازی کنند، که شبیه به بخش پیش‌نمایش نشان داده شده در برنامه انتخاب تصویر زمینه گوگل باشد؟

کلاس‌های اصلی که پیش‌نمایش را رندر می‌کنند WallpaperPicker2 و Launcher3 هستند.

صفحه پیش‌نمایش تصویر زمینه، WallpaperSectionController است.

چگونه می‌توان پیش‌نمایش را پس از تغییر رنگ، همانطور که در برنامه‌ی تصویر زمینه‌ی گوگل نشان داده شده است، پیاده‌سازی کرد؟

برنامه انتخاب تصویر زمینه انتظار دارد که یک ContentProvider از Launcher در دسترس باشد (یک لانچر مبتنی بر Launcher3 آن را دارد). پیش‌نمایش توسط GridCustomizationsProvider در Launcher ارائه می‌شود که باید در فراداده اصلی Activity لانچر برای خواندن تصویر زمینه و برنامه استایل به آن ارجاع داده شود. همه اینها در Launcher3 AOSP پیاده‌سازی شده و در دسترس OEMها است.