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
для обработки изменений конфигурации локали при изменении региональных предпочтений.
Чтобы найти эти настройки, откройте приложение «Настройки» и выберите «Система» > «Языки и ввод» > «Региональные настройки» .
Доступность
Нелинейное масштабирование шрифта до 200 %.
Начиная с Android 14, система поддерживает масштабирование шрифта до 200 %, предоставляя пользователям с плохим зрением дополнительные возможности доступа, соответствующие рекомендациям по доступности веб-контента (WCAG) .
Чтобы предотвратить слишком большое масштабирование больших текстовых элементов на экране, система применяет нелинейную кривую масштабирования. Эта стратегия масштабирования означает, что большой текст не масштабируется с той же скоростью, что и меньший текст. Нелинейное масштабирование шрифта помогает сохранить пропорциональную иерархию между элементами разных размеров, одновременно устраняя проблемы с линейным масштабированием текста при высоких степенях (например, обрезание текста или текст, который становится труднее читать из-за чрезвычайно больших размеров дисплея).
Протестируйте свое приложение с помощью нелинейного масштабирования шрифтов
Если вы уже используете масштабированные пиксели (sp) для определения размера текста, то эти дополнительные параметры и улучшения масштабирования автоматически применяются к тексту в вашем приложении. Тем не менее, вам все равно следует выполнять тестирование пользовательского интерфейса с включенным максимальным размером шрифта (200%), чтобы убедиться, что ваше приложение правильно применяет размеры шрифта и может использовать шрифты большего размера без ущерба для удобства использования.
Чтобы включить размер шрифта 200%, выполните следующие действия:
- Откройте приложение «Настройки» и перейдите в «Доступность» > «Размер дисплея и текст» .
- Для параметра «Размер шрифта» нажимайте значок плюса (+), пока не будет включена настройка максимального размера шрифта, как показано на изображении, сопровождающем этот раздел.
Используйте масштабированные единицы пикселей (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 для изображений
В Android 14 добавлена поддержка изображений с расширенным динамическим диапазоном (HDR), которые сохраняют больше информации от датчика при съемке фотографии, что обеспечивает яркие цвета и большую контрастность. Android использует формат Ultra HDR , который полностью обратно совместим с изображениями JPEG, что позволяет приложениям беспрепятственно взаимодействовать с изображениями HDR, отображая их в стандартном динамическом диапазоне (SDR) по мере необходимости.
Рендеринг этих изображений в пользовательском интерфейсе в HDR выполняется платформой автоматически, когда ваше приложение соглашается использовать HDR пользовательский интерфейс для своего окна активности либо через запись манифеста , либо во время выполнения путем вызова Window.setColorMode()
. Вы также можете захватывать сжатые неподвижные изображения Ultra HDR на поддерживаемых устройствах. Благодаря большему количеству цветов, полученных с датчика, редактирование при публикации может стать более гибким. Gainmap
связанный с изображениями Ultra HDR, можно использовать для их рендеринга с помощью OpenGL или Vulkan.
В 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 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 . Коммуникационные приложения также могут сообщать об использовании ярлыков для исходящих и входящих сообщений.
Поддержка встроенных и пользовательских анимаций для Predictive Back.
В Android 13 появилась предиктивная анимация возвращения домой, доступная для разработчиков. При использовании в поддерживаемом приложении с включенной опцией разработчика при смахивании назад отображается анимация, указывающая, что жест возврата позволяет выйти из приложения обратно на главный экран.
Android 14 включает в себя множество улучшений и новые рекомендации по функции Predictive Back:
- Вы можете установить
android:enableOnBackInvokedCallback=true
чтобы включить прогнозируемую обратную системную анимацию для каждого действия, а не для всего приложения. - Мы добавили новые системные анимации, сопровождающие анимацию возвращения домой из Android 13. Новые системные анимации связаны с перекрестными действиями и задачами, которые вы получаете автоматически после перехода на Predictive Back .
- Мы добавили новые анимации компонентов материала для нижних листов , боковых листов и поиска .
- Мы создали руководство по дизайну для создания пользовательских анимаций и переходов в приложениях.
- Мы добавили новые API для поддержки пользовательских анимаций перехода в приложении:
-
handleOnBackStarted
,handleOnBackProgressed
,handleOnBackCancelled
in
OnBackPressedCallback
-
onBackStarted
,onBackProgressed
,onBackCancelled
in
OnBackAnimationCallback
- Используйте
overrideActivityTransition
вместоoverridePendingTransition
для переходов, которые реагируют, когда пользователь проводит пальцем назад.
-
В этой предварительной версии 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 в ответ на входящие сообщения.
Графика
Пути доступны для запроса и интерполяции.
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
для рисования с малой задержкой.