نمای کلی ویژگی ها و API ها

اندروید 14 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. موارد زیر به شما کمک می کند تا با ویژگی های برنامه های خود آشنا شوید و با API های مرتبط شروع به کار کنید.

برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 14، به دنبال APIهایی باشید که در سطح API 34 اضافه شده اند. برای آشنایی با مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 14 را برای برنامه هایی که Android 14 را هدف قرار می دهند و برای همه برنامه ها بررسی کنید.

بین المللی شدن

ترجیحات زبان برای هر برنامه

Android 14 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:

  • Automatically generate an app's localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates the LocaleConfig file and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.

  • App language visibility for input method editors (IMEs): IMEs can utilize the getApplicationLocales() method to check the language of the current app and match the IME language to that language.

Grammatical Inflection API

3 میلیارد نفر به زبان‌های جنسیتی صحبت می‌کنند: زبان‌هایی که دسته‌های دستوری (مانند اسم‌ها، افعال، صفت‌ها و حروف اضافه) بر اساس جنسیت افراد و اشیایی که با آنها صحبت می‌کنید یا درباره آنها صحبت می‌کنید، عطف می‌شوند. به طور سنتی، بسیاری از زبان های جنسیتی از جنسیت دستوری مذکر به عنوان جنسیت پیش فرض یا عمومی استفاده می کنند.

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

To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.

ترجیحات منطقه ای

Regional preferences enable users to personalize temperature units, the first day of the week, and numbering systems. A European living in the United States might prefer temperature units to be in Celsius rather than Fahrenheit and for apps to treat Monday as the beginning of the week instead of the US default of Sunday.

New Android Settings menus for these preferences provide users with a discoverable and centralized location to change app preferences. These preferences also persist through backup and restore. Several APIs and intents—such as getTemperatureUnit and getFirstDayOfWeek— grant your app read access to user preferences, so your app can adjust how it displays information. You can also register a BroadcastReceiver on ACTION_LOCALE_CHANGED to handle locale configuration changes when regional preferences change.

To find these settings, open the Settings app and navigate to System > Languages & input > Regional preferences.

Regional preferences screen in Android system settings.
Temperature options for regional preferences in Android system settings.

دسترسی

مقیاس بندی فونت غیر خطی تا 200٪

Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).

To prevent large text elements on screen from scaling too large, the system applies a nonlinear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Nonlinear font scaling helps preserve the proportional hierarchy between elements of different sizes while mitigating issues with linear text scaling at high degrees (such as text being cut off or text that becomes harder to read due to an extremely large display sizes).

Test your app with nonlinear font scaling

Enable the maximum font size in a device's accessibility settings to test your app.

If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements are applied automatically to the text in your app. However, you should still perform UI testing with the maximum font size enabled (200%) to ensure that your app applies the font sizes correctly and can accommodate larger font sizes without impacting usability.

To enable 200% font size, follow these steps:

  1. Open the Settings app and navigate to Accessibility > Display size and text.
  2. For the Font size option, tap the plus (+) icon until the maximum font size setting is enabled, as shown in the image that accompanies this section.

Use scaled pixel (sp) units for text-sizes

Remember to always specify text sizes in sp units. When your app uses sp units, Android can apply the user's preferred text size and scale it appropriately.

Don't use sp units for padding or define view heights assuming implicit padding: with nonlinear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.

Convert scaled pixel (sp) units

Use TypedValue.applyDimension() to convert from sp units to pixels, and use TypedValue.deriveDimension() to convert pixels to sp. These methods apply the appropriate nonlinear scaling curve automatically.

Avoid hardcoding equations using Configuration.fontScale or DisplayMetrics.scaledDensity. Because font scaling is nonlinear, the scaledDensity field is no longer accurate. The fontScale field should be used for informational purposes only because fonts are no longer scaled with a single scalar value.

Use sp units for lineHeight

Always define android:lineHeight using sp units instead of dp, so the line height scales along with your text. Otherwise, if your text is sp but your lineHeight is in dp or px, it doesn't scale and looks cramped. TextView automatically corrects the lineHeight so that your intended proportions are preserved, but only if both textSize and lineHeight are defined in sp units.

دوربین و رسانه

Ultra HDR برای تصاویر

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or Vulkan.

زوم، فوکوس، Postview و موارد دیگر در پسوند دوربین

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

  • تخمین تأخیر پردازش عکسبرداری پویا برآوردهای تأخیر ثبت عکس را بر اساس شرایط فعلی صحنه و محیط ارائه می دهد. برای دریافت یک شی StillCaptureLatency که دارای دو روش تخمین تأخیر است، CameraExtensionSession.getRealtimeStillCaptureLatency() را فراخوانی کنید. متد getCaptureLatency() تاخیر تخمینی بین onCaptureStarted و onCaptureProcessStarted() را برمی گرداند و متد getProcessingLatency() تاخیر تخمینی بین onCaptureProcessStarted() و فریم پردازش شده نهایی موجود را برمی گرداند.
  • پشتیبانی از تماس‌های پیشروی ضبط به‌گونه‌ای که برنامه‌ها می‌توانند پیشرفت فعلی عملیات پردازش طولانی‌مدت را نشان دهند. می‌توانید بررسی کنید که آیا این ویژگی با CameraExtensionCharacteristics.isCaptureProcessProgressAvailable در دسترس است یا خیر، و در صورت وجود، پاسخ تماس onCaptureProcessProgressed() پیاده‌سازی می‌کنید که دارای پیشرفت (از 0 تا 100) به عنوان پارامتر است.
  • فراداده ویژه برنامه افزودنی، مانند CaptureRequest.EXTENSION_STRENGTH برای شماره گیری در مقدار افکت افزونه، مانند میزان تاری پس زمینه با EXTENSION_BOKEH .

  • ویژگی Postview برای Still Capture در پسوندهای دوربین، که تصویری با پردازش کمتر سریعتر از تصویر نهایی ارائه می دهد. اگر یک برنامه افزودنی تأخیر پردازش را افزایش داده باشد، می‌توان یک تصویر پس‌نمایش به‌عنوان جای‌بانی برای بهبود UX ارائه کرد و بعداً برای تصویر نهایی جایگزین شد. می توانید بررسی کنید که آیا این ویژگی با CameraExtensionCharacteristics.isPostviewAvailable موجود است یا خیر. سپس می توانید یک OutputConfiguration به ExtensionSessionConfiguration.setPostviewOutputConfiguration ارسال کنید.

  • پشتیبانی از SurfaceView که امکان یک مسیر رندر پیش نمایش بهینه تر و کم مصرف تر را فراهم می کند.

  • پشتیبانی از ضربه برای فوکوس و زوم در طول استفاده از برنامه افزودنی.

زوم درون سنسور

وقتی REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE در CameraCharacteristics حاوی SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW است، برنامه شما می‌تواند از قابلیت‌های حسگر پیشرفته استفاده کند تا یک جریان RAW برش داده شده، با استفاده از یک جریان RAW، از همان فیلد CaptureRequest استفاده کند CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW . با اجرای کنترل های لغو درخواست، دوربین به روز شده کنترل زوم را حتی قبل از آماده شدن سایر کنترل های دوربین به کاربران می دهد.

صدای USB بدون اتلاف

اندروید 14 از فرمت‌های صوتی بدون اتلاف برای تجربه در سطح دوستداران صوتی از طریق هدست‌های سیمی USB پشتیبانی می‌کند. می‌توانید از یک دستگاه USB برای ویژگی‌های میکسر ترجیحی آن پرس و جو کنید، یک شنونده را برای تغییرات در ویژگی‌های میکسر ترجیحی ثبت کنید، و ویژگی‌های میکسر را با استفاده از کلاس AudioMixerAttributes پیکربندی کنید. این کلاس فرمت، مانند ماسک کانال، نرخ نمونه و رفتار میکسر صدا را نشان می دهد. این کلاس امکان ارسال مستقیم صدا را بدون میکس، تنظیم صدا یا جلوه های پردازشی را فراهم می کند.

بهره وری توسعه دهندگان و ابزار

مدیر اعتبار

Android 14 adds Credential Manager as a platform API, with additional support back to Android 4.4 (API level 19) devices through a Jetpack Library using Google Play services. Credential Manager aims to make sign-in easier for users with APIs that retrieve and store credentials with user-configured credential providers. Credential Manager supports multiple sign-in methods, including username and password, passkeys, and federated sign-in solutions (such as Sign-in with Google) in a single API.

Passkeys provide many advantages. For example, passkeys are built on industry standards, can work across different operating systems and browser ecosystems, and can be used with both websites and apps.

For more information, see the Credential Manager and passkeys documentation and the blogpost about Credential Manager and passkeys.

Health Connect

Health Connect is an on-device repository for user health and fitness data. It allows users to share data between their favorite apps, with a single place to control what data they want to share with these apps.

On devices running Android versions prior to Android 14, Health Connect is available to download as an app on the Google Play store. Starting with Android 14, Health Connect is part of the platform and receives updates through Google Play system updates without requiring a separate download. With this, Health Connect can be updated frequently, and your apps can rely on Health Connect being available on devices running Android 14 or higher. Users can access Health Connect from the Settings in their device, with privacy controls integrated into the system settings.

Users can get started using Health Connect without a separate app download on devices running Android 14 or higher.
Users can control which apps have access to their health and fitness data through system settings.

Health Connect includes several new features in Android 14, such as exercise routes, allowing users to share a route of their workout which can be visualized on a map. A route is defined as a list of locations saved within a window of time, and your app can insert routes into exercise sessions, tying them together. To ensure that users have complete control over this sensitive data, users must allow sharing individual routes with other apps.

For more information, see the Health Connection documentation and the blogpost on What's new in Android Health.

به روز رسانی OpenJDK 17

Android 14 به کار تازه کردن کتابخانه‌های اصلی Android ادامه می‌دهد تا با ویژگی‌های جدیدترین نسخه OpenJDK LTS، از جمله به‌روزرسانی‌های کتابخانه و پشتیبانی از زبان جاوا 17 برای توسعه‌دهندگان برنامه‌ها و پلت‌فرم‌ها، هماهنگ شود.

ویژگی ها و بهبودهای زیر گنجانده شده است:

  • تقریباً 300 کلاس java.base به پشتیبانی جاوا 17 به روز شد.
  • بلوک های متنی که رشته های چند خطی را به زبان برنامه نویسی جاوا معرفی می کند.
  • تطبیق الگو برای instanceof ، که به یک شی اجازه می دهد تا بدون هیچ متغیر اضافی در یک instanceof یک نوع خاص در نظر گرفته شود.
  • کلاس‌های مهر و موم شده ، که به شما امکان می‌دهند کلاس‌ها و رابط‌هایی را که می‌توانند آنها را گسترش یا پیاده‌سازی کنند محدود کنید.

به لطف به‌روزرسانی‌های سیستم Google Play (Project Mainline)، بیش از 600 میلیون دستگاه برای دریافت آخرین به‌روزرسانی‌های Android Runtime (ART) فعال هستند که شامل این تغییرات می‌شود. این بخشی از تعهد ما برای دادن محیطی سازگارتر و امن‌تر به برنامه‌ها در سراسر دستگاه‌ها و ارائه ویژگی‌ها و قابلیت‌های جدید به کاربران مستقل از نسخه‌های پلتفرم است.

جاوا و OpenJDK علائم تجاری یا علائم تجاری ثبت شده Oracle و/یا شرکت های وابسته به آن هستند.

بهبود برای فروشگاه های برنامه

Android 14 چندین API PackageInstaller را معرفی می کند که به فروشگاه های برنامه اجازه می دهد تا تجربه کاربری خود را بهبود بخشند.

قبل از دانلود، تأیید نصب را درخواست کنید

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

با شروع Android 14، متد requestUserPreapproval() به نصب‌کنندگان این امکان را می‌دهد تا قبل از انجام جلسه نصب درخواست تأیید کاربر کنند. این بهبود به فروشگاه برنامه اجازه می‌دهد دانلود هر فایل APK را تا زمانی که نصب توسط کاربر تأیید شود به تعویق بیاندازد. علاوه بر این، هنگامی که کاربر نصب را تأیید کرد، فروشگاه برنامه می‌تواند برنامه را در پس‌زمینه دانلود و نصب کند بدون اینکه کاربر مزاحم شود.

مسئولیت به روز رسانی های آینده را به عهده بگیرید

متد setRequestUpdateOwnership() به نصب کننده اجازه می دهد تا به سیستم نشان دهد که قصد دارد مسئول به روز رسانی های بعدی برنامه ای باشد که در حال نصب است. این قابلیت اجرای مالکیت به‌روزرسانی را فعال می‌کند، به این معنی که فقط مالک به‌روزرسانی مجاز است به‌روزرسانی‌های خودکار را برای برنامه نصب کند. اجرای مالکیت به‌روزرسانی کمک می‌کند تا اطمینان حاصل شود که کاربران به‌روزرسانی‌ها را فقط از فروشگاه برنامه مورد انتظار دریافت می‌کنند.

هر نصب‌کننده دیگری، از جمله کسانی که از مجوز INSTALL_PACKAGES استفاده می‌کنند، باید تأیید صریح کاربر را برای نصب به‌روزرسانی دریافت کنند. اگر کاربری تصمیم بگیرد به‌روزرسانی را از منبع دیگری ادامه دهد، مالکیت به‌روزرسانی از بین می‌رود.

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

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

با شروع Android 14، InstallConstraints API راهی را به نصب‌کنندگان می‌دهد تا اطمینان حاصل کنند که به‌روزرسانی‌های برنامه‌شان در یک لحظه مناسب انجام می‌شود. به عنوان مثال، یک فروشگاه برنامه می تواند متد commitSessionAfterInstallConstraintsAreMet() را فراخوانی کند تا مطمئن شود که به روز رسانی تنها زمانی انجام می شود که کاربر دیگر با برنامه مورد نظر تعامل نداشته باشد.

یکپارچه تقسیم های اختیاری را نصب کنید

با تقسیم‌بندی APK، ویژگی‌های یک برنامه را می‌توان در فایل‌های APK جداگانه به جای یک APK یکپارچه ارائه کرد. Split APK به فروشگاه‌های برنامه اجازه می‌دهد تا تحویل اجزای مختلف برنامه را بهینه کنند. به عنوان مثال، فروشگاه های برنامه ممکن است بر اساس ویژگی های دستگاه مورد نظر بهینه سازی کنند. PackageInstaller API از زمان معرفی آن در سطح 22 API از تقسیمات پشتیبانی می کند.

در اندروید 14، متد setDontKillApp() به نصب کننده اجازه می دهد تا نشان دهد که فرآیندهای در حال اجرا برنامه نباید در هنگام نصب اسپلیت های جدید از بین بروند. فروشگاه های برنامه می توانند از این ویژگی برای نصب یکپارچه ویژگی های جدید یک برنامه در زمانی که کاربر از برنامه استفاده می کند استفاده کنند.

بسته‌های فراداده برنامه

با شروع Android 14، نصب‌کننده بسته Android به شما امکان می‌دهد ابرداده‌های برنامه مانند شیوه‌های ایمنی داده را برای درج در صفحات فروشگاه برنامه مانند Google Play مشخص کنید .

تشخیص زمانی که کاربران از دستگاه عکس می گیرند

برای ایجاد یک تجربه استانداردتر برای تشخیص اسکرین شات ها، اندروید 14 یک API تشخیص اسکرین شات حفظ حریم خصوصی را معرفی می کند. این API به برنامه‌ها اجازه می‌دهد تا تماس‌های برگشتی را بر اساس هر فعالیت ثبت کنند. این تماس‌های برگشتی فراخوانی می‌شوند و زمانی که کاربر یک عکس از صفحه می‌گیرد در حالی که آن فعالیت قابل مشاهده است، به کاربر اطلاع داده می‌شود.

تجربه کاربری

اقدامات سفارشی اشتراک‌گذاری و رتبه‌بندی بهبود یافته

Android 14 اشتراک‌گذاری سیستم را به‌روزرسانی می‌کند تا از اقدامات برنامه سفارشی و نتایج پیش‌نمایش آموزنده‌تر برای کاربران پشتیبانی کند.

افزودن اقدامات سفارشی

با Android 14، برنامه شما می‌تواند اقدامات سفارشی را به صفحه اشتراک سیستمی که فراخوانی می‌کند اضافه کند .

تصویری از اقدامات سفارشی در برگه اشتراک.

بهبود رتبه بندی اهداف اشتراک مستقیم

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

ردیف اشتراک مستقیم در برگه اشتراک، همانطور که با 1 نشان داده شده است

پشتیبانی از انیمیشن های داخلی و سفارشی برای Predictive Back

Video: Predictive back animations

Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.

Android 14 includes multiple improvements and new guidance for Predictive Back:

With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.

تولیدکننده دستگاه صفحه بزرگ برای هر برنامه لغو می شود

Per-app overrides enable device manufacturers to change the behavior of apps on large screen devices. For example, the FORCE_RESIZE_APP override instructs the system to resize the app to fit display dimensions (avoiding size compatibility mode) even if resizeableActivity="false" is set in the app manifest.

Overrides are intended to improve the user experience on large screens.

New manifest properties enable you to disable some device manufacturer overrides for your app.

صفحه نمایش بزرگ کاربر در هر برنامه لغو می شود

لغو هر برنامه رفتار برنامه ها را در دستگاه های صفحه بزرگ تغییر می دهد. برای مثال، لغو OVERRIDE_MIN_ASPECT_RATIO_LARGE سازنده دستگاه، نسبت تصویر برنامه را بدون توجه به پیکربندی برنامه روی 16:9 تنظیم می‌کند.

Android 14 QPR1 کاربران را قادر می‌سازد تا با استفاده از منوی تنظیمات جدید در دستگاه‌های صفحه‌نمایش بزرگ، نادیده‌گیری‌های هر برنامه را اعمال کنند.

اشتراک گذاری صفحه نمایش برنامه

App screen sharing enables users to share an app window instead of the entire device screen during screen content recording.

With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.

App screen sharing improves productivity and privacy by enabling users to run multiple apps but limit content sharing to a single app.

پاسخ هوشمند مبتنی بر LLM در Gboard در Pixel 8 Pro

در دستگاه‌های Pixel 8 Pro دارای ویژگی دسامبر، توسعه‌دهندگان می‌توانند پاسخ‌های هوشمند با کیفیت بالاتر را در Gboard که توسط مدل‌های زبان بزرگ (LLM) روی دستگاه اجرا می‌شوند در Google Tensor امتحان کنند.

این ویژگی به عنوان یک پیش نمایش محدود برای انگلیسی ایالات متحده در WhatsApp، Line و KakaoTalk در دسترس است. برای این کار باید از دستگاه Pixel 8 Pro با Gboard به عنوان صفحه کلید استفاده کنید.

برای امتحان کردن، ابتدا این ویژگی را در تنظیمات > گزینه‌های برنامه‌نویس > تنظیمات AiCore > فعال کردن Aicore Persistent فعال کنید.

سپس، مکالمه‌ای را در یک برنامه پشتیبانی‌شده باز کنید تا پاسخ هوشمند مبتنی بر LLM را در نوار پیشنهادی Gboard در پاسخ به پیام‌های دریافتی ببینید.

Gboard از LLM های روی دستگاه برای ارائه پاسخ های هوشمند با کیفیت بالاتر استفاده می کند.

گرافیک

مسیرها قابل پرس و جو و درون یابی هستند

Android's Path API is a powerful and flexible mechanism for creating and rendering vector graphics, with the ability to stroke or fill a path, construct a path from line segments or quadratic or cubic curves, perform boolean operations to get even more complex shapes, or all of these simultaneously. One limitation is the ability to find out what is actually in a Path object; the internals of the object are opaque to callers after creation.

To create a Path, you call methods such as moveTo(), lineTo(), and cubicTo() to add path segments. But there has been no way to ask that path what the segments are, so you must retain that information at creation time.

Starting in Android 14, you can query paths to find out what's inside of them. First, you need to get a PathIterator object using the Path.getPathIterator API:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

Next, you can call PathIterator to iterate through the segments one by one, retrieving all of the necessary data for each segment. This example uses PathIterator.Segment objects, which packages up the data for you:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

PathIterator also has a non-allocating version of next() where you can pass in a buffer to hold the point data.

One of the important use cases of querying Path data is interpolation. For example, you might want to animate (or morph) between two different paths. To further simplify that use case, Android 14 also includes the interpolate() method on Path. Assuming the two paths have the same internal structure, the interpolate() method creates a new Path with that interpolated result. This example returns a path whose shape is halfway (a linear interpolation of .5) between path and otherPath:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

The Jetpack graphics-path library enables similar APIs for earlier versions of Android as well.

مش های سفارشی با سایه زن های راس و قطعه

اندروید مدت‌هاست که از ترسیم مش‌های مثلثی با سایه‌زنی سفارشی پشتیبانی می‌کند، اما قالب مش ورودی به چند ترکیب ویژگی از پیش تعریف‌شده محدود شده است. اندروید 14 پشتیبانی از مش های سفارشی را اضافه می کند که می توانند به صورت مثلث یا نوارهای مثلثی تعریف شوند و به صورت اختیاری می توانند ایندکس شوند. این مش‌ها با ویژگی‌های سفارشی ، گام‌های راس، متغیر ، و سایه‌زن‌های راس و قطعه نوشته شده در AGSL مشخص می‌شوند.

سایه‌زن رأس، تغییراتی مانند موقعیت و رنگ را تعریف می‌کند، در حالی که سایه‌زن قطعه می‌تواند به‌طور اختیاری رنگ پیکسل را مشخص کند، معمولاً با استفاده از تغییرات ایجاد شده توسط سایه‌زن رأس. اگر رنگ توسط shader قطعه ارائه شود، سپس با استفاده از حالت ترکیبی انتخاب شده هنگام کشیدن مش، با رنگ فعلی Paint ترکیب می شود. برای انعطاف بیشتر، می‌توان لباس‌های یکنواخت را به سایه‌زن‌های قطعه و رأس منتقل کرد.

رندر بافر سخت افزاری برای Canvas

برای کمک به استفاده از Canvas API Android برای ترسیم شتاب سخت‌افزاری به یک HardwareBuffer ، Android 14 HardwareBufferRenderer را معرفی می‌کند. این API به ویژه زمانی مفید است که مورد استفاده شما شامل ارتباط با ترکیب کننده سیستم از طریق SurfaceControl برای ترسیم با تأخیر کم باشد.