סקירה כללית על תכונות וממשקי API

ב-Android 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 מיליארד אנשים דוברים שפות עם מגדר: שפות שבהן קטגוריות דקדוקיות – כמו שמות עצם, פעלים, שמות תואר ומילות יחס – משתנות בהתאם למגדר של האנשים והאובייקטים שאתם מדברים אליהם או עליהם. באופן מסורתי, בשפות רבות עם מגדר נעשה שימוש במגדר grammatcal masculine כמגדר ברירת המחדל או כמגדר כללי.

שימוש במגדר הדקדוקי הלא נכון למשתמשים, למשל שימוש במגדר הדקדוקי הזכרי לנשים, עלול להשפיע לרעה על הביצועים והגישה שלהם. לעומת זאת, ממשק משתמש עם שפה שמשקפת בצורה נכונה את המגדר הדקדוקי של המשתמש יכול לשפר את המעורבות של המשתמש ולספק חוויית משתמש מותאמת אישית יותר וטבעית יותר.

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% באופן לא לינארי

החל מ-Android 14, המערכת תומכת בהגדלת הגופן עד 200%, וכך מספקת למשתמשים אפשרויות נגישות נוספות.

כדי למנוע מצביעה של אלמנטים גדולים של טקסט במסך להיות גדולה מדי, אפליקציית המערכת משתמשת בעקומת שינוי גודל לא לינארית. משמעות אסטרטגיית ההתאמה הזו היא שטקסט גדול לא מותאם באותו קצב כמו טקסט קטן יותר. שינוי גודל גופן לא לינארי עוזר לשמור על ההיררכיה הפרופורציונלית בין רכיבים בגדלים שונים, וגם לצמצם בעיות שקשורות לשינוי גודל טקסט לינארי במידות גבוהות (למשל, טקסט שנחתך או טקסט שקשה יותר לקרוא בגלל גדלים גדולים במיוחד של המסך).

בדיקת האפליקציה באמצעות שינוי גודל גופן לא לינארי

כדי לבדוק את האפליקציה, מפעילים את גודל הגופן המקסימלי בהגדרות הנגישות של המכשיר.

אם כבר השתמשתם ביחידות של פיקסלים שניתן לשנות (sp) כדי להגדיר את גודל הטקסט, האפשרויות הנוספות האלה והשיפורים בהתאמת הגודל יחולו באופן אוטומטי על הטקסט באפליקציה. עם זאת, עדיין מומלץ לבצע בדיקות של ממשק המשתמש עם גודל הגופן המקסימלי (200%) כדי לוודא שהאפליקציה מגדירה את גדלי הגופן בצורה נכונה, ושהיא יכולה להכיל גדלים גדולים יותר של גופן בלי לפגוע בשימושיות.

כדי להגדיר את גודל הגופן ל-200%, פועלים לפי השלבים הבאים:

  1. פותחים את אפליקציית ההגדרות ועוברים אל נגישות > גודל התצוגה והטקסט.
  2. באפשרות גודל גופן, מקישים על סמל הפלוס (+) עד שמפעילים את הגדרת גודל הגופן המקסימלי, כמו שמוצג בתמונה שמצורפת לקטע הזה.

שימוש ביחידות של פיקסלים משוקללים (sp) לגדלים של טקסט

חשוב לזכור להגדיר תמיד את גודל הטקסט ביחידות sp. כשהאפליקציה משתמשת ביחידות sp, מערכת Android יכולה להחיל את גודל הטקסט המועדף על המשתמש ולשנות את קנה המידה שלו בהתאם.

אל תשתמשו ביחידות sp למרווחים פנימיים או להגדרת גובה התצוגה בהנחה של מרווחים פנימיים מרומזים: בשינוי גודל לא לינארי של גופן, מימדי sp לא בהכרח יהיו פרופורציונליים, ולכן 4sp + 20sp לא בהכרח יהיו שווים ל-24sp.

המרת יחידות של פיקסלים שניתן לשנות (sp)

אפשר להשתמש ב-TypedValue.applyDimension() כדי להמיר יחידות sp לפיקסלים, וב-TypedValue.deriveDimension() כדי להמיר פיקסלים ליחידות sp. השיטות האלה מחילות באופן אוטומטי את עקומת ההתאמה הלא לינארית המתאימה.

אין להשתמש בקידוד קשיח של משוואות באמצעות התגים Configuration.fontScale או DisplayMetrics.scaledDensity. ההתאמה של גודל הגופן היא לא ליניארית, ולכן השדה scaledDensity כבר לא מדויק. השדה fontScale מיועד לצורכי מידע בלבד, כי הגופנים כבר לא מותאמים באמצעות ערך סקלרי יחיד.

שימוש ביחידות sp בשביל lineHeight

תמיד צריך להגדיר את android:lineHeight באמצעות יחידות sp במקום יחידות dp, כדי שגובה השורה יותאם לגודל הטקסט. אחרת, אם הטקסט הוא sp אבל lineHeight הוא dp או px, הוא לא משתנה בהתאם לגודל המסך ונראה צפוף. ‫TextView מתקן אוטומטית את lineHeight כדי לשמור על הפרופורציות הרצויות, אבל רק אם גם textSize וגם lineHeight מוגדרים ביחידות sp.

מצלמה ומדיה

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.

זום, מיקוד, תצוגה מקדימה ועוד בתוספים למצלמה

ב-Android 14 יש שיפורים בתוספים למצלמה, שמאפשרים לאפליקציות להתמודד עם זמני עיבוד ארוכים יותר. כך אפשר לצלם תמונות טובות יותר באמצעות אלגוריתמים שמבוססים על חישובים כבדים, כמו צילום בתאורה חלשה במכשירים נתמכים. התכונות האלה מספקות למשתמשים חוויה חזקה עוד יותר כשהם משתמשים ביכולות של התוספים למצלמה. דוגמאות לשיפורים האלה:

  • אומדן זמן האחזור הדינמי של עיבוד התמונות הסטטיות מספק אומדנים מדויקים הרבה יותר של זמן האחזור של התמונות הסטטיות, על סמך תנאי הסביבה והסצנה הנוכחיים. קוראים ל-CameraExtensionSession.getRealtimeStillCaptureLatency() כדי לקבל אובייקט StillCaptureLatency עם שתי שיטות להערכת זמן האחזור. השיטה getCaptureLatency() מחזירה את זמן האחזור המשוער בין onCaptureStarted ל-onCaptureProcessStarted(), והשיטה getProcessingLatency() מחזירה את זמן האחזור המשוער בין onCaptureProcessStarted() לבין זמינות המסגרת הסופית שעברה עיבוד.
  • תמיכה בקריאות חזרה (callbacks) של התקדמות הצילום, כדי שאפליקציות יוכלו להציג את ההתקדמות הנוכחית של פעולות עיבוד ממושכות של צילומי סטילס. אפשר לבדוק אם התכונה הזו זמינה באמצעות CameraExtensionCharacteristics.isCaptureProcessProgressAvailable. אם כן, מטמיעים את פונקציית הקריאה החוזרת onCaptureProcessProgressed(), שבה מועבר הפרמטר של ההתקדמות (מ-0 עד 100).
  • מטא-נתונים ספציפיים לתוסף, כמו CaptureRequest.EXTENSION_STRENGTH כדי להזין את מידת האפקט של התוסף, למשל מידת הטשטוש של הרקע באמצעות EXTENSION_BOKEH.

  • התכונה 'תצוגה לאחר הצילום' לצילום סטילס בתוספים למצלמה, שמספקת תמונה שעברה עיבוד פחות מאשר התמונה הסופית, במהירות גבוהה יותר. אם תוסף מאריך את זמן האחזור לעיבוד, אפשר לספק תמונה שלאחר הצפייה כתמונה זמנית כדי לשפר את חוויית המשתמש, ולאחר מכן להחליף אותה בתמונה הסופית. אפשר לבדוק אם התכונה הזו זמינה באמצעות CameraExtensionCharacteristics.isPostviewAvailable. לאחר מכן תוכלו להעביר OutputConfiguration אל ExtensionSessionConfiguration.setPostviewOutputConfiguration.

  • תמיכה ב-SurfaceView שמאפשרת נתיב עיבוד נתונים יעיל יותר וחסכוני יותר באנרגיה לתצוגה מקדימה.

  • תמיכה בהקשה כדי להתמקד ובשינוי מרחק התצוגה במהלך השימוש בתוסף.

זום בחיישן

When REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE in CameraCharacteristics contains SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, your app can use advanced sensor capabilities to give a cropped RAW stream the same pixels as the full field of view by using a CaptureRequest with a RAW target that has stream use case set to CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. By implementing the request override controls, the updated camera gives users zoom control even before other camera controls are ready.

אודיו ב-USB ללא אובדן נתונים

ב-Android 14 יש תמיכה בפורמטים של אודיו ללא אובדן נתונים, כדי שתוכלו ליהנות מחוויית אודיו ברמה גבוהה באמצעות אוזניות קוויות עם חיבור USB. אפשר לשלוח שאילתה למכשיר USB כדי לקבל את מאפייני המיקסר המועדפים שלו, לרשום מאזין לשינויים במאפייני המיקסר המועדפים ולהגדיר את מאפייני המיקסר באמצעות הכיתה AudioMixerAttributes. המחלקה הזו מייצגת את הפורמט, כמו מסכת הערוץ, קצב הדגימה וההתנהגות של מיקסר האודיו. הסוג הזה מאפשר לשלוח אודיו ישירות, בלי ערבוב, שינוי עוצמת קול או עיבוד אפקטים.

פרודוקטיביות וכלים למפתחים

מנהל פרטי הכניסה

ב-Android 14 נוספה התמיכה ב-Credential Manager כ-API בפלטפורמה, עם תמיכה נוספת במכשירי Android 4.4 (רמת API 19) דרך ספריית Jetpack באמצעות Google Play Services. המטרה של Credential Manager היא להקל על המשתמשים להיכנס באמצעות ממשקי API שמאחזרים ומאחסנים את פרטי הכניסה באמצעות ספקי פרטי כניסה שהמשתמשים מגדירים. Credential Manager תומך במספר שיטות כניסה, כולל שם משתמש וסיסמה, מפתחות גישה ופתרונות כניסה מאוחדת (כמו 'כניסה באמצעות חשבון Google') בממשק API אחד.

למפתחות הגישה יש יתרונות רבים. לדוגמה, מפתחות הגישה מבוססים על תקנים מקובלים בתחום, יכולים לפעול במגוון מערכות הפעלה וסביבות עסקיות בדפדפנים, ואפשר להשתמש בהם גם באתרים וגם באפליקציות.

למידע נוסף, עיינו במסמכי העזרה בנושא Credential Manager ומפתחות גישה ובפוסט בבלוג בנושא Credential Manager ומפתחות גישה.

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 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases, including both library updates and Java 17 language support for app and platform developers.

The following features and improvements are included:

  • Updated approximately 300 java.base classes to Java 17 support.
  • Text Blocks, which introduce multi-line string literals to the Java programming language.
  • Pattern Matching for instanceof, which allows an object to be treated as having a specific type in an instanceof without any additional variables.
  • Sealed classes, which allow you restrict which classes and interfaces can extend or implement them.

Thanks to Google Play system updates (Project Mainline), over 600 million devices are enabled to receive the latest Android Runtime (ART) updates that include these changes. This is part of our commitment to give apps a more consistent, secure environment across devices, and to deliver new features and capabilities to users independent of platform releases.

Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

שיפורים בחנויות אפליקציות

Android 14 introduces several PackageInstaller APIs that allow app stores to improve their user experience.

Request install approval before downloading

Installing or updating an app might require user approval. For example, when an installer making use of the REQUEST_INSTALL_PACKAGES permission attempts to install a new app. In prior Android versions, app stores can only request user approval after APKs are written to the install session and the session is committed.

Starting with Android 14, the requestUserPreapproval() method lets installers request user approval before committing the install session. This improvement lets an app store defer downloading any APKs until after the installation has been approved by the user. Furthermore, once a user has approved installation, the app store can download and install the app in the background without interrupting the user.

Claim responsibility for future updates

The setRequestUpdateOwnership() method allows an installer to indicate to the system that it intends to be responsible for future updates to an app it is installing. This capability enables update ownership enforcement, meaning that only the update owner is permitted to install automatic updates to the app. Update ownership enforcement helps to ensure that users receive updates only from the expected app store.

Any other installer, including those making use of the INSTALL_PACKAGES permission, must receive explicit user approval in order to install an update. If a user decides to proceed with an update from another source, update ownership is lost.

Update apps at less-disruptive times

App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.

Starting with Android 14, the InstallConstraints API gives installers a way to ensure that their app updates happen at an opportune moment. For example, an app store can call the commitSessionAfterInstallConstraintsAreMet() method to make sure that an update is only committed when the user is no longer interacting with the app in question.

Seamlessly install optional splits

With split APKs, features of an app can be delivered in separate APK files, rather than as a monolithic APK. Split APKs allow app stores to optimize the delivery of different app components. For example, app stores might optimize based on the properties of the target device. The PackageInstaller API has supported splits since its introduction in API level 22.

In Android 14, the setDontKillApp() method allows an installer to indicate that the app's running processes shouldn't be killed when new splits are installed. App stores can use this feature to seamlessly install new features of an app while the user is using the app.

חבילות של מטא-נתונים של אפליקציות

החל מ-Android 14, מנהל החבילות של Android מאפשר לציין מטא-נתונים של אפליקציות, כמו שיטות לאבטחת נתונים, כדי לכלול אותם בדפי החנות של האפליקציות, כמו Google Play.

זיהוי מתי משתמשים מצלמים מסך במכשיר

כדי ליצור חוויה סטנדרטית יותר של זיהוי צילומי מסך, ב-Android 14 מוצג API לזיהוי צילומי מסך ששומר על הפרטיות. ה-API הזה מאפשר לאפליקציות לרשום פונקציות קריאה חוזרת על בסיס כל פעילות. הקריאות החוזרות האלה מופעלות, והמשתמש מקבל הודעה, כשהמשתמש מצלם צילום מסך בזמן שהפעילות הזו גלויה.

חוויית משתמש

פעולות מותאמות אישית ודירוג משופר של קובץ לשיתוף

Android 14 updates the system sharesheet to support custom app actions and more informative preview results for users.

Add custom actions

With Android 14, your app can add custom actions to the system sharesheet it invokes.

Screenshot of custom actions on the sharesheet.

Improve ranking of Direct Share targets

Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.

Direct Share row in the sharesheet, as shown by 1

תמיכה באנימציות מובנות ומותאמות אישית לחיזוי של תנועת החזרה

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.

הגדרות ברירת מחדל שונות לכל אפליקציה למשתמשים במסכים גדולים

Per-app overrides change the behavior of apps on large screen devices. For example, the OVERRIDE_MIN_ASPECT_RATIO_LARGE device manufacturer override sets the app aspect ratio to 16:9 regardless of the app's configuration.

Android 14 QPR1 enables users to apply per‑app overrides by means of a new settings menu on large screen devices.

שיתוף מסך של אפליקציה

שיתוף מסך של אפליקציה מאפשר למשתמשים לשתף חלון של אפליקציה במקום את כל מסך המכשיר במהלך הקלטת תוכן המסך.

כשמשתפים את המסך של אפליקציה, סרגל הסטטוס, סרגל הניווט, ההתראות ואלמנטים אחרים בממשק המשתמש של המערכת לא נכללים במסך המשותף. רק התוכן של האפליקציה שנבחרה ישותף.

שיתוף המסך של אפליקציות משפר את הפרודוקטיביות והפרטיות, כי הוא מאפשר למשתמשים להפעיל כמה אפליקציות אבל להגביל את שיתוף התוכן לאפליקציה אחת.

תשובה מהירה מבוססת-LLM ב-Gboard ב-Pixel 8 Pro

במכשירי Pixel 8 Pro עם גרסת Feature Drop מדצמבר, מפתחים יכולים לנסות תשובות חכמות באיכות גבוהה יותר ב-Gboard שמבוססות על מודלים גדולים של שפה (LLM) במכשיר שפועלים על Google Tensor.

התכונה הזו זמינה בתור תצוגה מקדימה מוגבלת באנגלית (ארה"ב) ב-WhatsApp, ב-Line וב-KakaoTalk. כדי להשתמש בתכונה הזו, צריך מכשיר Pixel 8 Pro עם Gboard כמקלדת.

כדי לנסות את התכונה, קודם צריך להפעיל אותה בקטע הגדרות > אפשרויות למפתחים > הגדרות AICore > הפעלת AICore Persistent.

לאחר מכן, פותחים שיחה באפליקציה נתמכת כדי לראות את התשובות המהירות שמבוססות על LLM בשורת ההצעות של Gboard בתגובה להודעות נכנסות.

Gboard משתמש במודלים של LLM במכשיר כדי לספק תשובות מהירות באיכות גבוהה יותר.

גרפיקה

אפשר להריץ שאילתות על נתיבים ולבצע אינטרפולציה שלהם

ה-API Path של Android הוא מנגנון עוצמתי וגמיש ליצירה ולרינדור של גרפיקה וקטורית, עם אפשרות לצייר או למלא נתיב, לבנות נתיב מקטעי קו או מעקומות ריבועיות או ממעלה שלישית, לבצע פעולות בוליאניות כדי לקבל צורות מורכבות יותר או את כל האפשרויות האלה בו-זמנית. אחת מהמגבלות היא היכולת לברר מה נמצא בפועל באובייקט Path. הרכיבים הפנימיים של האובייקט לא גלויים למבצעי הקריאה אחרי היצירה.

כדי ליצור Path, צריך לבצע קריאה ל-methods כמו moveTo(),‏ lineTo() ו-cubicTo() כדי להוסיף קטעי נתיב. אבל לא הייתה אפשרות לשאול את הנתיב הזה מהם הפלחים, ולכן צריך לשמור את המידע הזה בזמן היצירה.

החל מ-Android 14, אפשר לשלוח שאילתות לגבי נתיבים כדי לבדוק מה נמצא בהם. קודם כול, צריך לקבל אובייקט PathIterator באמצעות API של Path.getPathIterator:

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();

לאחר מכן אפשר לקרוא ל-PathIterator כדי לבצע איטרציה אחרי הפילוחים אחד אחרי השני, ולאחזר את כל הנתונים הנדרשים לכל פלח. בדוגמה הזו נעשה שימוש באובייקטים מסוג PathIterator.Segment, שמארזים את הנתונים בשבילכם:

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 יש גם גרסה של next() שלא מקצה לה, שבה אפשר להעביר במאגר נתונים זמני כדי לשמור את נתוני הנקודות.

אחד מהתרחישים החשובים לדוגמה לשליחת שאילתות לגבי נתוני Path הוא אינטרפולציה. לדוגמה, יכול להיות שתרצו ליצור אנימציה (או טרנספורמציה) בין שני נתיבים שונים. כדי לפשט את התרחיש הזה, Android 14 כולל גם את השיטה interpolate() ב-Path. בהנחה שלשני הנתיבים יש מבנה פנימי זהה, ה-method interpolate() יוצרת Path חדש עם התוצאה בעלת האינטרפולציה. הדוגמה הזו מחזירה נתיב שהצורה שלו היא חצי (אינטרפולציה לינארית של 0 .5) בין path ל-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);
}

ספריית graphics-path של Jetpack מאפשרת להשתמש בממשקי API דומים גם בגרסאות קודמות של Android.

רשתות מותאמות אישית עם הצללות של קודקודים ושל פרגמנטים

כבר זמן רב יש ב-Android תמיכה בציור של רשתות משולשים עם הצללה בהתאמה אישית, אבל פורמט הרשת של הקלט היה מוגבל למספר שילובים מוגדרים מראש של מאפיינים. ב-Android 14 נוספה תמיכה במערכות רשת מותאמות אישית, שאפשר להגדיר כמשולשיים או כרצועות משולשים, ואפשר גם להוסיף אותן לאינדקס. המרקשים האלה מצוינים באמצעות מאפיינים מותאמים אישית, צעדים של קודקודים, משתנים ושגיאות של קודקודים וחלקיקים שנכתבו ב-AGSL.

ב-vertex shader מוגדרים המשתנים, כמו המיקום והצבע, ואילו ב-fragment shader אפשר להגדיר את הצבע של הפיקסל, בדרך כלל באמצעות המשתנים שנוצרו על ידי ה-vertex shader. אם הצבע מסופק על ידי ה-fragment shader, הוא מעורבב עם הצבע הנוכחי של Paint באמצעות מצב המיזוג שנבחר בזמן ציור המכסה. אפשר להעביר מאפיינים אחידים לשדרוגים של הפיקסלים והקודקודים כדי לקבל גמישות נוספת.

מעבד מאגר נתונים זמני של חומרה ל-Canvas

To assist in using Android's Canvas API to draw with hardware acceleration into a HardwareBuffer, Android 14 introduces HardwareBufferRenderer. This API is particularly useful when your use case involves communication with the system compositor through SurfaceControl for low-latency drawing.