Обзор функций и API

Android 14 предлагает отличные функции и API для разработчиков. Следующие инструкции помогут вам узнать о функциях ваших приложений и начать работу с соответствующими API.

Подробный список добавленных, измененных и удаленных API можно найти в отчете о различиях API . Подробную информацию о добавленных API см. в справочнике по API Android . Для Android 14 найдите API, добавленные на уровне API 34. Чтобы узнать об областях, в которых изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями в поведении Android 14 для приложений, которые целевой Android 14 и для всех приложений .

Интернационализация

Языковые настройки для каждого приложения

В Android 14 языковые функции каждого приложения , которые были представлены в Android 13 (уровень API 33), расширены следующими дополнительными возможностями:

  • Автоматически генерировать localeConfig приложения . Начиная с Android Studio Giraffe Canary 7 и AGP 8.1.0-alpha07, вы можете настроить свое приложение для автоматической поддержки языковых настроек для каждого приложения . На основе ресурсов вашего проекта плагин Android Gradle создает файл LocaleConfig и добавляет ссылку на него в окончательный файл манифеста, поэтому вам больше не придется создавать или обновлять файл вручную. AGP использует ресурсы в папках res модулей вашего приложения и любых зависимостях модулей библиотеки, чтобы определить локали, которые необходимо включить в файл LocaleConfig .

  • Динамические обновления для localeConfig приложения . Используйте методы setOverrideLocaleConfig() и getOverrideLocaleConfig() в LocaleManager чтобы динамически обновлять список поддерживаемых языков вашего приложения в системных настройках устройства . Используйте эту гибкость, чтобы настроить список поддерживаемых языков для каждого региона, проводить эксперименты A/B или предоставлять обновленный список языков, если ваше приложение использует отправку на стороне сервера для локализации.

  • Видимость языка приложения для редакторов методов ввода (IME) . IME могут использовать метод getApplicationLocales() для проверки языка текущего приложения и сопоставления языка IME с этим языком.

API грамматического изменения

3 миллиарда человек говорят на гендерных языках : языках, в которых грамматические категории, такие как существительные, глаголы, прилагательные и предлоги, изменяются в зависимости от пола людей и предметов, с которыми вы разговариваете или о которых вы говорите. Традиционно во многих гендерных языках мужской грамматический род используется в качестве родового или общего рода по умолчанию.

Обращение к пользователям неправильного грамматического рода, например обращение к женщинам мужского грамматического рода, может негативно повлиять на их работу и отношение. Напротив, пользовательский интерфейс с языком, который правильно отражает грамматический пол пользователя, может улучшить взаимодействие с пользователем и обеспечить более персонализированный и естественный пользовательский интерфейс.

Чтобы помочь вам создать ориентированный на пользователя пользовательский интерфейс для гендерных языков, в Android 14 представлен API Grammatical Inflection , который позволяет добавить поддержку грамматического рода без рефакторинга вашего приложения.

Региональные предпочтения

Региональные настройки позволяют пользователям персонализировать единицы измерения температуры, первый день недели и системы нумерации. Европеец, живущий в Соединенных Штатах, может предпочесть, чтобы единицы температуры были в градусах Цельсия, а не в Фаренгейте, и чтобы приложения считали понедельник началом недели, а не воскресенье по умолчанию в США.

Новые меню настроек Android для этих настроек предоставляют пользователям доступное и централизованное место для изменения настроек приложений. Эти настройки также сохраняются при резервном копировании и восстановлении. Некоторые API и намерения, такие как getTemperatureUnit и getFirstDayOfWeek , предоставляют вашему приложению доступ для чтения к пользовательским настройкам, поэтому ваше приложение может настроить способ отображения информации. Вы также можете зарегистрировать BroadcastReceiver в ACTION_LOCALE_CHANGED для обработки изменений конфигурации локали при изменении региональных предпочтений.

Чтобы найти эти настройки, откройте приложение «Настройки» и выберите «Система» > «Языки и ввод» > «Региональные настройки» .

Экран региональных настроек в настройках системы Android.
Параметры температуры для региональных предпочтений в настройках системы Android.

Доступность

Нелинейное масштабирование шрифта до 200 %.

Начиная с Android 14, система поддерживает масштабирование шрифта до 200 %, предоставляя пользователям с плохим зрением дополнительные возможности доступа, соответствующие рекомендациям по доступности веб-контента (WCAG) .

Чтобы предотвратить слишком большое масштабирование больших текстовых элементов на экране, система применяет нелинейную кривую масштабирования. Эта стратегия масштабирования означает, что большой текст не масштабируется с той же скоростью, что и меньший текст. Нелинейное масштабирование шрифта помогает сохранить пропорциональную иерархию между элементами разных размеров, одновременно устраняя проблемы с линейным масштабированием текста при высоких степенях (например, обрезание текста или текст, который становится труднее читать из-за чрезвычайно больших размеров дисплея).

Протестируйте свое приложение с помощью нелинейного масштабирования шрифтов

Включите максимальный размер шрифта в настройках специальных возможностей устройства, чтобы протестировать приложение.

Если вы уже используете масштабированные пиксели (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.

Камера и медиа

Ультра HDR для изображений

Иллюстрация качества изображения стандартного динамического диапазона (SDR) и расширенного динамического диапазона (HDR).

В Android 14 добавлена ​​поддержка изображений с расширенным динамическим диапазоном (HDR), которые сохраняют больше информации от датчика при съемке фотографии, что обеспечивает яркие цвета и большую контрастность. Android использует формат Ultra HDR , который полностью обратно совместим с изображениями JPEG, что позволяет приложениям беспрепятственно взаимодействовать с изображениями HDR, отображая их в стандартном динамическом диапазоне (SDR) по мере необходимости.

Рендеринг этих изображений в пользовательском интерфейсе в HDR выполняется платформой автоматически, когда ваше приложение соглашается использовать HDR пользовательский интерфейс для своего окна активности либо через запись манифеста , либо во время выполнения путем вызова Window.setColorMode() . Вы также можете захватывать сжатые неподвижные изображения Ultra HDR на поддерживаемых устройствах. Благодаря большему количеству цветов, полученных с датчика, редактирование при публикации может стать более гибким. Gainmap связанный с изображениями Ultra HDR, можно использовать для их рендеринга с помощью OpenGL или Vulkan.

,
Иллюстрация качества изображения стандартного динамического диапазона (SDR) и расширенного динамического диапазона (HDR).

В Android 14 добавлена ​​поддержка изображений с расширенным динамическим диапазоном (HDR), которые сохраняют больше информации от датчика при съемке фотографии, что обеспечивает яркие цвета и большую контрастность. Android использует формат Ultra HDR , который полностью обратно совместим с изображениями JPEG, что позволяет приложениям беспрепятственно взаимодействовать с изображениями HDR, отображая их в стандартном динамическом диапазоне (SDR) по мере необходимости.

Рендеринг этих изображений в пользовательском интерфейсе в HDR выполняется платформой автоматически, когда ваше приложение соглашается использовать HDR пользовательский интерфейс для своего окна активности либо через запись манифеста , либо во время выполнения путем вызова Window.setColorMode() . Вы также можете захватывать сжатые неподвижные изображения Ultra HDR на поддерживаемых устройствах. Благодаря большему количеству цветов, полученных с датчика, редактирование при публикации может стать более гибким. Gainmap связанный с изображениями Ultra HDR, можно использовать для их рендеринга с помощью OpenGL или Vulkan.

Масштабирование, фокусировка, постпросмотр и многое другое в расширениях камеры.

В Android 14 обновляются и совершенствуются расширения камеры , что позволяет приложениям обрабатывать больше времени, что позволяет улучшать изображения с помощью алгоритмов с интенсивными вычислениями, таких как фотография при слабом освещении, на поддерживаемых устройствах. Эти функции дают пользователям еще больше возможностей при использовании дополнительных возможностей камеры. Примеры таких улучшений включают в себя:

  • Динамическая оценка задержки обработки кадров обеспечивает гораздо более точную оценку задержки захвата фотографий на основе текущей сцены и условий окружающей среды. Вызовите CameraExtensionSession.getRealtimeStillCaptureLatency() чтобы получить объект StillCaptureLatency , имеющий два метода оценки задержки. Метод getCaptureLatency() возвращает расчетную задержку между onCaptureStarted и onCaptureProcessStarted() , а метод getProcessingLatency() возвращает расчетную задержку между onCaptureProcessStarted() и доступным окончательным обработанным кадром.
  • Поддержка обратных вызовов процесса захвата, чтобы приложения могли отображать текущий ход длительных операций обработки неподвижного захвата. Вы можете проверить, доступна ли эта функция, с помощью CameraExtensionCharacteristics.isCaptureProcessProgressAvailable , и если да, вы реализуете обратный вызов onCaptureProcessProgressed() , в котором в качестве параметра передается прогресс (от 0 до 100).
  • Метаданные, специфичные для расширения, такие как CaptureRequest.EXTENSION_STRENGTH для набора величины эффекта расширения, например степени размытия фона с помощью EXTENSION_BOKEH .

  • Функция Postview для захвата фотографий в расширениях камеры, которая обеспечивает менее обработанное изображение быстрее, чем окончательное изображение. Если расширение имеет увеличенную задержку обработки, изображение после просмотра может быть предоставлено в качестве заполнителя для улучшения UX и позже отключено для окончательного изображения. Вы можете проверить, доступна ли эта функция, с помощью CameraExtensionCharacteristics.isPostviewAvailable . Затем вы можете передать OutputConfiguration в ExtensionSessionConfiguration.setPostviewOutputConfiguration .

  • Поддержка SurfaceView обеспечивающая более оптимизированный и энергоэффективный путь предварительного просмотра.

  • Поддержка касания для фокусировки и масштабирования во время использования расширения.

Встроенный зум

Если REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE в CameraCharacteristics содержит SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW , ваше приложение может использовать расширенные возможности датчика, чтобы предоставить обрезанному потоку RAW те же пиксели, что и полное поле зрения, используя CaptureRequest с целевым объектом RAW, для которого установлен вариант использования потока CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW _CASES_CROPPED_RAW . Благодаря реализации элементов управления переопределением запроса обновленная камера дает пользователям возможность управлять масштабированием даже до того, как будут готовы другие элементы управления камерой.

USB-аудио без потерь

В Android 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.

Здоровье Connect

Health Connect — это встроенное в устройство хранилище данных о здоровье и фитнесе пользователей. Это позволяет пользователям обмениваться данными между своими любимыми приложениями, используя единое место для управления тем, какими данными они хотят делиться с этими приложениями.

На устройствах под управлением версий Android до Android 14 Health Connect можно загрузить в виде приложения в магазине Google Play. Начиная с Android 14, Health Connect является частью платформы и получает обновления через обновления системы Google Play, не требуя отдельной загрузки. Благодаря этому Health Connect может часто обновляться, и ваши приложения могут рассчитывать на то, что Health Connect будет доступен на устройствах под управлением Android 14 или более поздней версии. Пользователи могут получить доступ к Health Connect из настроек своего устройства, а элементы управления конфиденциальностью интегрированы в настройки системы.

Пользователи могут начать использовать Health Connect без отдельной загрузки приложения на устройствах под управлением Android 14 или более поздней версии.
Пользователи могут контролировать, какие приложения имеют доступ к данным о их здоровье и фитнесе, через настройки системы.

Health Connect включает в себя несколько новых функций в Android 14, таких как маршруты тренировок, позволяющие пользователям делиться маршрутом своей тренировки, который можно визуализировать на карте. Маршрут определяется как список мест, сохраненных в течение определенного периода времени, и ваше приложение может вставлять маршруты в сеансы тренировок, связывая их вместе. Чтобы обеспечить полный контроль над этими конфиденциальными данными, пользователи должны разрешить совместное использование отдельных маршрутов с другими приложениями.

Дополнительные сведения см. в документации Health Connection и в записи блога «Что нового в 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 представлен API обнаружения снимков экрана , сохраняющий конфиденциальность. Этот API позволяет приложениям регистрировать обратные вызовы для каждого действия. Эти обратные вызовы вызываются, и пользователь уведомляется, когда он делает снимок экрана, когда это действие видно.

,

Чтобы создать более стандартизированный процесс обнаружения снимков экрана, в Android 14 представлен API обнаружения снимков экрана , сохраняющий конфиденциальность. Этот API позволяет приложениям регистрировать обратные вызовы для каждого действия. Эти обратные вызовы вызываются, и пользователь уведомляется, когда он делает снимок экрана, когда это действие видно.

Пользовательский опыт

Дополнительные действия в Sharesheet и улучшенный рейтинг

В Android 14 обновляется общая таблица системы для поддержки настраиваемых действий приложения и более информативных результатов предварительного просмотра для пользователей.

Добавить специальные действия

В Android 14 ваше приложение может добавлять специальные действия в общую таблицу системы, которую оно вызывает.

Скриншот настраиваемых действий на общем листе.

Улучшить рейтинг целей Direct Share

Android 14 использует больше сигналов от приложений для определения рейтинга целей прямого обмена и предоставления более полезных результатов для пользователя. Чтобы обеспечить наиболее полезный сигнал для ранжирования, следуйте инструкциям по улучшению рейтинга ваших целей Direct Share . Коммуникационные приложения также могут сообщать об использовании ярлыков для исходящих и входящих сообщений.

Строка Direct Share в таблице общего доступа, как показано цифрой 1.

Поддержка встроенных и пользовательских анимаций для Predictive Back.

Видео: прогнозирующая анимация спины

В Android 13 появилась предиктивная анимация возвращения домой, доступная для разработчиков. При использовании в поддерживаемом приложении с включенной опцией разработчика при смахивании назад отображается анимация, указывающая, что жест возврата позволяет выйти из приложения обратно на главный экран.

Android 14 включает в себя множество улучшений и новые рекомендации по функции Predictive Back:

В этой предварительной версии Android 14 все функции Predictive Back остаются за пределами возможностей разработчика. См. руководство для разработчиков, чтобы вернуть приложение на интеллектуальный режим , а также руководство для разработчиков по созданию пользовательских переходов внутри приложения .

Переопределения для каждого приложения производителя устройства с большим экраном

Переопределения для каждого приложения позволяют производителям устройств изменять поведение приложений на устройствах с большим экраном. Например, переопределение FORCE_RESIZE_APP предписывает системе изменить размер приложения в соответствии с размерами дисплея (избегая режима совместимости размеров), даже если в манифесте приложения установлено resizeableActivity="false" .

Переопределения предназначены для улучшения взаимодействия с пользователем на больших экранах.

Новые свойства манифеста позволяют отключить некоторые переопределения производителя устройства для вашего приложения.

Переопределения для пользователей с большим экраном для каждого приложения

Переопределения для каждого приложения меняют поведение приложений на устройствах с большим экраном. Например, переопределение производителя устройства OVERRIDE_MIN_ASPECT_RATIO_LARGE устанавливает соотношение сторон приложения на 16:9 независимо от конфигурации приложения.

Android 14 QPR1 позволяет пользователям применять переопределения для каждого приложения с помощью нового меню настроек на устройствах с большим экраном.

Совместное использование экрана приложения

Совместное использование экрана приложения позволяет пользователям делиться окном приложения, а не всем экраном устройства во время записи содержимого экрана.

При совместном использовании экрана приложения строка состояния, панель навигации, уведомления и другие элементы пользовательского интерфейса системы исключаются из общего дисплея. Доступен только контент выбранного приложения.

Совместное использование экрана приложений повышает производительность и конфиденциальность, позволяя пользователям запускать несколько приложений, но ограничивая общий доступ к контенту одним приложением.

Умный ответ на базе 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 на устройстве для предоставления более качественных интеллектуальных ответов.

Графика

Пути доступны для запроса и интерполяции.

API Path Android — это мощный и гибкий механизм для создания и рендеринга векторной графики с возможностью обводки или заливки пути, построения пути из сегментов линий, квадратичных или кубических кривых, выполнения логических операций для получения еще более сложных фигур или все из них одновременно. Одним из ограничений является возможность узнать, что на самом деле находится в объекте Path; внутренности объекта непрозрачны для вызывающих сторон после создания.

Чтобы создать Path , вы вызываете такие методы, как moveTo() , lineTo() и cubicTo() , чтобы добавить сегменты пути. Но у этого пути не было возможности узнать, что представляют собой сегменты, поэтому вы должны сохранить эту информацию во время создания.

Начиная с Android 14, вы можете запрашивать пути, чтобы узнать, что внутри них. Во-первых, вам нужно получить объект PathIterator с помощью API Path.getPathIterator :

Котлин

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

Ява

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 , которые упаковывают данные за вас:

Котлин

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

Ява

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

PathIterator также имеет версию next() без выделения памяти, в которую вы можете передать буфер для хранения данных точек.

Одним из важных вариантов использования запроса данных Path является интерполяция. Например, вы можете захотеть анимировать (или трансформировать ) между двумя разными путями. Чтобы еще больше упростить этот вариант использования, Android 14 также включает метод interpolate() в Path . Предполагая, что два пути имеют одинаковую внутреннюю структуру, метод interpolate() создает новый Path с этим интерполированным результатом. В этом примере возвращается путь, форма которого находится на полпути (линейная интерполяция .5) между path otherPath :

Котлин

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

Ява

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

Библиотека графических путей Jetpack также поддерживает аналогичные API для более ранних версий Android.

Пользовательские сетки с вершинными и фрагментными шейдерами

Android has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.

The vertex shader defines the varyings, such as position and color, while the fragment shader can optionally define the color for the pixel, typically by using the varyings created by the vertex shader. If color is provided by the fragment shader, it is then blended with the current Paint color using the blend mode selected when drawing the mesh. Uniforms can be passed into the fragment and vertex shaders for additional flexibility.

Аппаратный рендеринг буфера для Canvas

Чтобы помочь в использовании Android Canvas API для рисования с аппаратным ускорением в HardwareBuffer , в Android 14 представлен HardwareBufferRenderer . Этот API особенно полезен, когда ваш вариант использования предполагает связь с системным наборщиком через SurfaceControl для рисования с малой задержкой.