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
:使用LocaleManager
方法中的setOverrideLocaleConfig()
和getOverrideLocaleConfig()
可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。输入法 (IME) 的应用语言可见性:IME 可以利用
getApplicationLocales()
方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。
API грамматического изменения
3 миллиарда человек говорят на гендерных языках : языках, в которых грамматические категории, такие как существительные, глаголы, прилагательные и предлоги, изменяются в зависимости от пола людей и предметов, с которыми вы разговариваете или о которых вы говорите. Традиционно во многих гендерных языках мужской грамматический род используется в качестве родового или общего рода по умолчанию.
Обращение к пользователям неправильного грамматического рода, например обращение к женщинам мужского грамматического рода, может негативно повлиять на их работу и отношение. Напротив, пользовательский интерфейс с языком, который правильно отражает грамматический пол пользователя, может улучшить взаимодействие с пользователем и обеспечить более персонализированный и естественный пользовательский интерфейс.
为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。
Региональные предпочтения
Региональные настройки позволяют пользователям персонализировать единицы измерения температуры, первый день недели и системы нумерации. Европеец, живущий в Соединенных Штатах, может предпочесть, чтобы единицы температуры были в градусах Цельсия, а не в Фаренгейте, и чтобы приложения считали понедельник началом недели, а не воскресенье по умолчанию в США.
Новые меню настроек 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 добавлен диспетчер учетных данных в качестве API платформы с дополнительной поддержкой устройств Android 4.4 (уровень API 19) через библиотеку Jetpack с использованием сервисов Google Play. Диспетчер учетных данных призван упростить вход в систему для пользователей с помощью API, которые извлекают и сохраняют учетные данные с помощью поставщиков учетных данных, настраиваемых пользователем. Диспетчер учетных данных поддерживает несколько методов входа, включая имя пользователя и пароль, ключи доступа и решения для федеративного входа (например, вход с помощью Google) в одном API.
Ключи доступа дают множество преимуществ. Например, ключи доступа созданы на основе отраслевых стандартов , могут работать в различных операционных системах и экосистемах браузеров и могут использоваться как с веб-сайтами, так и с приложениями.
Дополнительные сведения см. в документации по диспетчеру учетных данных и ключам доступа, а также в записи блога о диспетчере учетных данных и ключах доступа .
Здоровье 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 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。
其中包含以下功能和改进:
- 将大约 300 个
java.base
类更新为支持 Java 17。 - 文本块 - 为 Java 编程语言引入了多行字符串字面量。
- instanceof 模式匹配:可让对象在
instanceof
中被视为具有特定类型,而无需任何额外的变量。 - 密封类:允许您限制哪些类和接口可以扩展或实现它们。
得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。
Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。
Улучшения для магазинов приложений
В Android 14 представлено несколько API-интерфейсов PackageInstaller
, которые позволяют магазинам приложений улучшить взаимодействие с пользователем.
Перед загрузкой запросите разрешение на установку
Для установки или обновления приложения может потребоваться одобрение пользователя . Например, когда установщик, использующий разрешение REQUEST_INSTALL_PACKAGES
пытается установить новое приложение. В предыдущих версиях Android магазины приложений могли запрашивать одобрение пользователя только после того, как APK-файлы были записаны в сеанс установки и сеанс был зафиксирован .
Начиная с Android 14, метод requestUserPreapproval()
позволяет установщикам запрашивать одобрение пользователя перед завершением сеанса установки. Это улучшение позволяет магазину приложений отложить загрузку любых APK-файлов до тех пор, пока установка не будет одобрена пользователем. Более того, как только пользователь одобрил установку, магазин приложений сможет загрузить и установить приложение в фоновом режиме, не отвлекая пользователя.
Взять на себя ответственность за будущие обновления
Метод setRequestUpdateOwnership()
позволяет установщику указать системе, что он намерен нести ответственность за будущие обновления устанавливаемого приложения. Эта возможность обеспечивает принудительное применение прав собственности на обновления. Это означает, что только владельцу обновления разрешено устанавливать автоматические обновления для приложения. Обеспечение прав собственности на обновления помогает гарантировать, что пользователи получают обновления только из ожидаемого магазина приложений.
Любой другой установщик, в том числе использующий разрешение INSTALL_PACKAGES
, должен получить явное одобрение пользователя для установки обновления. Если пользователь решает продолжить обновление из другого источника, право собственности на обновление теряется.
Обновляйте приложения в удобное для вас время
Магазины приложений обычно стараются избегать обновления активно используемого приложения, поскольку это приводит к остановке запущенных процессов приложения, что потенциально может прерывать действия пользователя.
Начиная с Android 14, API InstallConstraints
дает установщикам возможность гарантировать, что обновления их приложений будут выполняться в подходящий момент. Например, магазин приложений может вызвать метод commitSessionAfterInstallConstraintsAreMet()
чтобы убедиться, что обновление фиксируется только тогда, когда пользователь больше не взаимодействует с рассматриваемым приложением.
Простая установка дополнительных сплит-систем
Благодаря разделенным APK-файлам функции приложения могут быть представлены в отдельных APK-файлах, а не в виде монолитного APK. Разделенные APK-файлы позволяют магазинам приложений оптимизировать доставку различных компонентов приложения. Например, магазины приложений могут оптимизироваться на основе свойств целевого устройства. API PackageInstaller
поддерживает разделение с момента его появления на уровне API 22.
В Android 14 метод setDontKillApp()
позволяет установщику указать, что запущенные процессы приложения не должны завершаться при установке новых разбиений. Магазины приложений могут использовать эту функцию для беспрепятственной установки новых функций приложения, пока пользователь его использует.
Пакеты метаданных приложения
Начиная с Android 14, установщик пакетов Android позволяет указать метаданные приложения , например правила безопасности данных, для включения на страницы магазина приложений, например Google Play.
Обнаруживайте, когда пользователи делают снимки экрана устройства
为了打造更加标准化的屏幕截图检测体验,Android 14 引入了可保护隐私的屏幕截图检测 API。借助此 API,应用可以按 activity 注册回调。如果用户在该 activity 可见时截取屏幕截图,系统会调用这些回调并通知用户。
Пользовательский опыт
Дополнительные действия в Sharesheet и улучшенный рейтинг
Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。
添加自定义操作
对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作。
提高直接共享目标的排名
Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。为了提供最实用的排名信号,请遵循提高直接共享目标排名的准则。通讯应用还可以报告出站和入站消息的快捷方式使用情况。
Поддержка встроенных и пользовательских анимаций для 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
在搭载 12 月功能分块的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中试用质量更高的智能回复,这些回复由在 Google Tensor 上运行的设备端大语言模型 (LLM) 提供支持。
此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中以美式英语的形式提供给用户进行小范围测试。此功能需要使用 Pixel 8 Pro 设备,并将 Gboard 用作键盘。
如需试用此功能,请先依次前往设置 > 开发者选项 > AiCore 设置 > 启用 Aicore 持久性,启用该功能。
接下来,在受支持的应用中打开对话,即可在 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 уже давно поддерживает рисование треугольных сеток с настраиваемой заливкой, но формат входной сетки был ограничен несколькими предопределенными комбинациями атрибутов. В Android 14 добавлена поддержка пользовательских сеток , которые можно определить как треугольники или треугольные полосы и при необходимости можно индексировать. Эти сетки задаются с помощью пользовательских атрибутов , шагов вершин, переменных , а также вершинных и фрагментных шейдеров, написанных на AGSL .
Вершинный шейдер определяет такие вариации, как положение и цвет, тогда как фрагментный шейдер может дополнительно определять цвет пикселя, обычно используя вариации, созданные вершинным шейдером. Если цвет предоставляется фрагментным шейдером, он затем смешивается с текущим цветом Paint
используя режим наложения , выбранный при рисовании сетки . Униформы можно передавать во фрагментные и вершинные шейдеры для дополнительной гибкости.
Аппаратный рендеринг буфера для Canvas
协助使用 Android 的 Canvas
API 通过
硬件加速至 HardwareBuffer
、Android 14
引入了 HardwareBufferRenderer
。如果您的用例涉及通过 SurfaceControl
与系统合成器通信以实现低延迟绘制,此 API 特别有用。