Android 14 incluye excelentes funciones y APIs para desarrolladores. A continuación, se incluye información que te ayudará a conocer las funciones de tus apps y a comenzar a usar las APIs relacionadas.
Para obtener una lista detallada de las APIs agregadas, modificadas y quitadas, consulta el informe de diferencias de la API. Para obtener detalles sobre las APIs agregadas, consulta la referencia de la API de Android. En Android 14, busca las APIs que se agregaron en el nivel de API 34. Para obtener información sobre las áreas en las que los cambios de la plataforma podrían afectar tus apps, asegúrate de revisar los cambios en el comportamiento de Android 14 para apps orientadas a Android 14 y para todas las apps.
Internacionalización
Preferencias de idioma de las apps
Android 14 amplía las funciones del idioma de las apps que se introdujeron en Android 13 (nivel de API 33) con estas capacidades adicionales:
Genera automáticamente
localeConfigde una app: A partir de Android Studio Giraffe Canary 7 y AGP 8.1.0-alpha07, puedes configurar tu app para que admita automáticamente las preferencias de idioma de las apps. En función de los recursos de tu proyecto, el complemento de Android para Gradle genera el archivoLocaleConfigy le agrega una referencia en el archivo de manifiesto final, por lo que ya no necesitas crear ni actualizar el archivo de forma manual. AGP usa los recursos en las carpetasresde los módulos de tu app y las dependencias de módulos de biblioteca para determinar las configuraciones regionales que se incluirán en el archivoLocaleConfig.Actualizaciones dinámicas para
localeConfigde una app: Usa los métodossetOverrideLocaleConfig()ygetOverrideLocaleConfig()deLocaleManagerpara actualizar, de forma dinámica, la lista de idiomas compatibles con tu app en la configuración del sistema del dispositivo. Usa esta flexibilidad para personalizar la lista de idiomas compatibles por región, ejecutar experimentos A/B o proporcionar una lista actualizada de configuraciones regionales si tu app usa envíos del servidor para la localización.Visibilidad del idioma de la app para editores de métodos de entrada (IME): Los IMEs pueden usar el método
getApplicationLocales()para verificar el idioma de la app actual y hacer coincidir el idioma IME con ese idioma.
API de Grammatical Inflection
Tres mil millones de personas hablan idiomas con género, es decir, idiomas en los que las categorías gramaticales, como sustantivos, verbos, adjetivos y preposiciones, inflexionan según el género de las personas y los objetos con las que te comunicas o sobre los que hablas. Tradicionalmente, muchos idiomas con género usan el género gramatical masculino como el género predeterminado o genérico.
Dirigirse a usuarios con un género gramatical incorrecto, por ejemplo, a mujeres con género gramatical masculino, puede tener un impacto negativo en su rendimiento y actitud. Por el contrario, una IU con un lenguaje que refleja, de forma correcta, el género gramatical del usuario puede mejorar su participación y proporcionar una experiencia más personalizada y más natural.
Para ayudarte a compilar una IU centrada en el usuario para idiomas con inflexión de género, Android 14 introduce la API de Grammatical Inflection, que te permite agregar compatibilidad con el género gramatical sin refactorizar la app.
Preferencias regionales
Las preferencias regionales permiten que los usuarios personalicen las unidades de temperatura, el primer día de la semana y los sistemas de numeración. Una persona europea que vive en los Estados Unidos podría preferir que las unidades de temperatura estén en Celsius en lugar de Fahrenheit y que las apps consideren el lunes como comienzo de la semana en lugar de los domingos, la opción predeterminada en EE.UU.
Los nuevos menús de configuración de Android para estas preferencias les proporcionan a los usuarios una ubicación detectable y centralizada para cambiar las preferencias de las apps. Estas preferencias también se mantienen en copias de seguridad y restablecimientos. Varias APIs y algunos intents, como getTemperatureUnit y getFirstDayOfWeek, le otorgan a tu app acceso de lectura a las preferencias de los usuarios, por lo que tu app puede ajustar la forma en que muestra la información. También puedes registrar un BroadcastReceiver en ACTION_LOCALE_CHANGED para controlar los cambios de configuración regional cuando cambien las preferencias regionales.
Para encontrar esta configuración, abre la app de Configuración y dirígete a Sistema > Idiomas y entrada > Preferencias regionales.
Accesibilidad
Escalamiento de fuente no lineal al 200%
A partir de Android 14, el sistema admite el escalamiento de la fuente hasta el 200%, lo que les brinda a los usuarios opciones de accesibilidad adicionales.
Para evitar que los elementos de texto grandes en la pantalla escalen demasiado, el sistema aplica una curva de escalamiento no lineal. Esta estrategia de escalamiento implica que el texto grande no escala a la misma velocidad que uno más pequeño. El escalamiento de fuente no lineal ayuda a preservar la jerarquía proporcional entre elementos de diferentes tamaños y, al mismo tiempo, mitiga los problemas con el escalamiento lineal de texto en grados altos (como el texto cortado o el texto que se vuelve más difícil de leer por su gran tamaño de visualización).
Prueba tu app con el escalamiento de fuente no lineal
Si ya usas unidades de píxeles escalables (sp) para definir el tamaño del texto, estas opciones adicionales y las mejoras en el escalamiento se aplicarán automáticamente al texto de tu app. Sin embargo, debes realizar pruebas de la IU con el tamaño de fuente máximo habilitado (200%) para asegurarte de que tu app aplique los tamaños de fuente correctamente y pueda admitir tamaños de fuente más grandes sin afectar la usabilidad.
Para habilitar el tamaño de la fuente al 200%, sigue estos pasos:
- Abre la app de Configuración y dirígete a Accesibilidad > Tamaño y texto de la pantalla.
- En la opción Tamaño de fuente, presiona el ícono de signo más (+) hasta que se habilite la configuración de tamaño máximo de fuente, como se muestra en la imagen que acompaña esta sección.
Usa unidades de píxeles ajustados (sp) para los tamaños de texto
Recuerda que siempre debes especificar los tamaños de texto en unidades de sp. Cuando tu app usa unidades de sp, Android puede aplicar el tamaño de texto que prefiere el usuario y escalarlo de forma correcta.
No uses unidades de sp para el padding ni definas alturas de vista suponiendo un padding implícito: Con el escalamiento de fuente no lineal, las dimensiones de sp podrían no ser proporcionales, por lo que 4 sp + 20 sp podría no ser igual a 24 sp.
Convierte unidades de píxeles ajustados (sp)
Usa TypedValue.applyDimension() para convertir unidades de sp en píxeles y TypedValue.deriveDimension() para convertir píxeles en sp. Estos métodos aplican automáticamente la curva de escalamiento no lineal adecuada.
Evita codificar la ecuación con Configuration.fontScale o DisplayMetrics.scaledDensity. Como el escalamiento de fuente no es lineal, el campo scaledDensity ya no es preciso. El campo fontScale solo debe usarse con fines informativos, ya que las fuentes ya no se ajustan con un solo valor escalar.
Usa unidades sp para lineHeight
Siempre define android:lineHeight con unidades sp en lugar de dp, de modo que la altura de la línea se ajuste junto con el texto. De lo contrario, si tu texto está en sp, pero tu lineHeight está en dp o px, no se ajustará y se verá apretado.
TextView corrige automáticamente el lineHeight para que se conserven las proporciones deseadas, pero solo si textSize y lineHeight se definen en unidades sp.
Cámara y contenido multimedia
Ultra HDR para imágenes
Android 14 新增了对高动态范围 (HDR) 图片的支持,可在拍摄照片时保留更多来自传感器的信息,从而实现鲜艳的色彩和更高的对比度。Android 使用 Ultra HDR 格式,该格式与 JPEG 图片完全向后兼容,可让应用与 HDR 图片无缝互操作,并根据需要以标准动态范围 (SDR) 显示这些图片。
当您的应用选择为其 activity 窗口使用 HDR 界面(通过清单条目或通过在运行时调用 Window.setColorMode())时,框架会自动在界面中以 HDR 格式渲染这些图片。您还可以在受支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,后期编辑的灵活性就越高。与 Ultra HDR 图片关联的 Gainmap 可用于使用 OpenGL 或 Vulkan 渲染这些图片。
Zoom, enfoque, Postview y mucho más en las extensiones de cámara
Android 14 actualiza y mejora las extensiones de la cámara, lo que permite que las apps manejen tiempos de procesamiento más largos, lo que permite mejorar las imágenes con algoritmos intensivos en procesamiento, como la fotografía con poca luz en dispositivos compatibles. Estas funciones les brindan a los usuarios una experiencia aún más sólida cuando usan las funciones de extensión de la cámara. Entre los ejemplos de estas mejoras, se incluyen los siguientes:
- La estimación de latencia de procesamiento de capturas estáticas dinámicas proporciona estimaciones de latencia de capturas estáticas mucho más precisas en función de las condiciones actuales de la escena y el entorno. Llama a
CameraExtensionSession.getRealtimeStillCaptureLatency()para obtener un objetoStillCaptureLatencyque tenga dos métodos de estimación de latencia. El métodogetCaptureLatency()muestra la latencia estimada entreonCaptureStartedyonCaptureProcessStarted(), y el métodogetProcessingLatency()muestra la latencia estimada entreonCaptureProcessStarted()y el fotograma procesado final que está disponible. - Compatibilidad con devoluciones de llamada de progreso de captura para que las apps puedan mostrar el progreso actual de las operaciones de procesamiento de capturas estáticas de larga duración. Puedes verificar si esta función está disponible con
CameraExtensionCharacteristics.isCaptureProcessProgressAvailabley, si es así, implementar la devolución de llamadaonCaptureProcessProgressed(), que tiene el progreso (de 0 a 100) pasado como parámetro. Metadatos específicos de la extensión, como
CaptureRequest.EXTENSION_STRENGTHpara marcar la cantidad de un efecto de extensión, como la cantidad de desenfoque de fondo conEXTENSION_BOKEHFunción de vista posterior para la captura de imágenes fijas en extensiones de cámara, que proporciona una imagen menos procesada más rápido que la imagen final. Si una extensión tiene una latencia de procesamiento mayor, se puede proporcionar una imagen posterior a la vista como marcador de posición para mejorar la UX y cambiarla más adelante por la imagen final. Puedes verificar si esta función está disponible con
CameraExtensionCharacteristics.isPostviewAvailable. Luego, puedes pasar unOutputConfigurationaExtensionSessionConfiguration.setPostviewOutputConfiguration.Compatibilidad con
SurfaceView, que permite una ruta de renderización de vista previa más optimizada y eficiente en términos de energía.Se agregó compatibilidad con el enfoque y el zoom con un toque durante el uso de la extensión.
Zoom en el sensor
Cuando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE en CameraCharacteristics contiene SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, tu app puede usar capacidades avanzadas del sensor para darle a una transmisión RAW recortada los mismos píxeles que el campo de visión completo con un CaptureRequest con un objetivo RAW que tiene el caso de uso de transmisión configurado en CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW.
Cuando se implementan los controles de anulación de solicitudes, la cámara actualizada les brinda a los usuarios control de zoom incluso antes de que estén listos otros controles de la cámara.
Audio USB sin pérdida
Android 14 admite formatos de audio sin pérdida para experiencias de nivel de audiófilo con auriculares con cable USB. Puedes consultar un dispositivo USB para obtener sus atributos de mezclador preferidos, registrar un objeto de escucha para detectar cambios en los atributos de mezclador preferidos y configurar los atributos de mezclador con la clase AudioMixerAttributes. Esta clase representa el formato, como la máscara de canales, la tasa de muestreo y el comportamiento del mezclador de audio. La clase permite que el audio se envíe directamente, sin mezclar, ajustar el volumen ni procesar efectos.
Productividad y herramientas para desarrolladores
Credential Manager
Android 14 将 Credential Manager 添加为平台 API,并通过使用 Google Play 服务的 Jetpack 库,向后额外支持 Android 4.4(API 级别 19)设备。Credential Manager 旨在通过 API 使用用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。Credential Manager 在单个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。
通行密钥具有许多优势。例如,通行密钥是基于业界标准构建的,可在各种不同的操作系统和浏览器生态系统中使用,并且可用于网站和应用。
如需了解详情,请参阅 Credential Manager 和通行密钥文档以及介绍 Credential Manager 和通行密钥的博文。
Health Connect
Health Connect 是用户健康与健身数据的设备端仓库。借助该功能,用户可以在一个位置控制要与这些应用共享哪些数据,并在自己喜爱的应用之间共享数据。
在搭载 Android 14 之前的 Android 版本的设备上,Health Connect 可作为应用从 Google Play 商店下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样一来,Health Connect 就可以频繁更新,您的应用可以依赖于搭载 Android 14 或更高版本的设备上提供的 Health Connect。用户可以通过设备的“设置”访问 Health Connect,隐私控制功能集成到系统设置中。
Health Connect 在 Android 14 中包含多项新功能,例如锻炼路线,可让用户分享可在地图上直观呈现的锻炼路线。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户能够完全控制此类敏感数据,用户必须允许与其他应用共享单个路线。
如需了解详情,请参阅 Health Connect 文档以及有关 Android Health 中的新功能的博文。
Actualizaciones de 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 及/或其关联公司的商标或注册商标。
Mejoras para tiendas de aplicaciones
Android 14 introduce varias APIs de PackageInstaller que permiten que las tiendas de aplicaciones mejoren la experiencia del usuario.
Solicita aprobación para la instalación antes de realizar la descarga
La instalación o actualización de una app puede requerir aprobación del usuario.
Por ejemplo, cuando un instalador que usa el permiso REQUEST_INSTALL_PACKAGES intenta instalar una app nueva. En versiones anteriores de Android, las tiendas de aplicaciones solo pueden solicitar la aprobación del usuario después de que se escriben los APK en la sesión de instalación y esta está confirmada.
A partir de Android 14, el método requestUserPreapproval() les permite a los instaladores solicitar la aprobación del usuario antes de confirmar la sesión de instalación. Esta mejora permite que una tienda de aplicaciones aplace la descarga de cualquier APK hasta que el usuario haya aprobado la instalación. Además, una vez que un usuario aprobó la instalación, la tienda de aplicaciones puede descargarla e instalarla en segundo plano sin interrumpir al usuario.
Reclama la responsabilidad de las actualizaciones futuras
El método setRequestUpdateOwnership() permite que un instalador le indique al sistema que tiene la responsabilidad de las actualizaciones futuras de una app que instala. Esta función permite actualizar la aplicación forzosa de la propiedad, es decir, que solo el propietario de la actualización puede instalar actualizaciones automáticas en la app. La aplicación forzosa de la actualización de la propiedad ayuda a garantizar que los usuarios reciban actualizaciones solo desde la tienda de aplicaciones prevista.
Cualquier otro instalador, incluidos los que usan el permiso INSTALL_PACKAGES, deben recibir la aprobación explícita del usuario para instalar una actualización. Si un usuario decide continuar con la actualización desde otra fuente, la propiedad de esta se perderá.
Actualiza las apps en momentos menos disruptivos
Por lo general, las tiendas de aplicaciones quieren evitar actualizar una app que está en uso de forma activa, ya que esto produce que se finalicen los procesos en ejecución de la app, lo que podría interrumpir lo que el usuario estaba haciendo.
A partir de Android 14, la API de InstallConstraints les brinda a los instaladores una forma de garantizar que las actualizaciones de apps se realicen en un momento oportuno. Por ejemplo, una tienda de aplicaciones puede llamar al método commitSessionAfterInstallConstraintsAreMet() para asegurarse de que una actualización solo se confirme cuando el usuario ya no interactúa con la app en cuestión.
Instala divisiones opcionales sin inconvenientes
Con los APK divididos, las funciones de una app se pueden entregar en archivos APK separados, en lugar de un APK monolítico. Los APK divididos permiten que las tiendas de aplicaciones optimicen la entrega de diferentes componentes de las apps. Por ejemplo, las tiendas de aplicaciones pueden realizar optimizaciones en función de las propiedades del dispositivo de destino. La API de PackageInstaller es compatible con las divisiones desde su introducción en el nivel de API 22.
En Android 14, el método setDontKillApp() permite que un instalador indique que los procesos en ejecución de la app no deberían finalizar cuando se instalan nuevas divisiones. Las tiendas de aplicaciones pueden usar esta función para instalar funciones nuevas de una app sin inconvenientes mientras el usuario la usa.
Paquetes de metadatos de la app
A partir de Android 14, el instalador de paquetes de Android te permite especificar metadatos de la app, como las prácticas de seguridad de los datos, para incluir en las páginas de la tienda de aplicaciones, como Google Play.
Detecta cuando los usuarios toman capturas de pantalla del dispositivo
Para crear una experiencia más estandarizada para detectar capturas de pantalla, Android 14 introduce una API de detección de capturas de pantalla que preserva la privacidad. Esta API permite que las apps registren devoluciones de llamada por actividad. Estas devoluciones de llamada se invocan y se notifica al usuario cuando toma una captura de pantalla mientras esa actividad está visible.
Experiencia del usuario
Acciones personalizadas y clasificación mejorada de Sharesheet
Android 14 actualiza la hoja compartida del sistema para admitir acciones personalizadas de la app y resultados informativos de la versión preliminar para los usuarios.
Agrega acciones personalizadas
Con Android 14, tu app puede agregar acciones personalizadas a la hoja compartida del sistema que invoca.
Mejora la clasificación de los objetivos de Direct Share
Android 14 usa más indicadores de las apps para determinar la clasificación de los objetivos de Direct Share para proporcionarles resultados más útiles al usuario. Para proporcionar el indicador más útil para la clasificación, sigue las instrucciones para mejorar las clasificaciones de tus objetivos de Direct Share. Las apps de comunicación también pueden informar el uso de combinaciones de teclas para los mensajes entrantes y salientes.
Compatibilidad con animaciones integradas y personalizadas para el gesto atrás predictivo
En Android 13, se introdujo la animación de atrás predictivo a la página principal detrás de una opción para desarrolladores. Cuando se usa en una app compatible que tiene habilitada la opción para desarrolladores, al deslizar hacia atrás, se muestra una animación que indica que el gesto de retroceso permite cerrar la app y regresar a la pantalla principal.
Android 14 incluye varias mejoras y orientación nueva para el gesto atrás predictivo:
- Puedes configurar
android:enableOnBackInvokedCallback=truepara habilitar las animaciones del sistema de atrás predictivo por actividad en lugar de para toda la app. - Agregamos nuevas animaciones del sistema para acompañar la animación de regreso a la pantalla principal de Android 13. Las nuevas animaciones del sistema son las de cambio de actividad y cambio de tarea, que obtienes automáticamente después de la migración al gesto atrás predictivo.
- Agregamos nuevas animaciones de componentes de material para las hojas inferiores, las hojas laterales y la búsqueda.
- Creamos una guía de diseño para crear transiciones y animaciones personalizadas en la app.
- Agregamos nuevas APIs para admitir animaciones de transición en la app:
handleOnBackStarted,handleOnBackProgressedyhandleOnBackCancelledinOnBackPressedCallbackonBackStarted,onBackProgressedyonBackCancelledinOnBackAnimationCallback- Usa
overrideActivityTransitionen lugar deoverridePendingTransitionpara las transiciones que responden cuando el usuario desliza el dedo hacia atrás
Con esta versión preliminar de Android 14, todas las funciones de atrás predictivo permanecen detrás de una opción para desarrolladores. Consulta la guía para desarrolladores para migrar tu app al gesto atrás predictivo, así como la guía para desarrolladores para crear transiciones personalizadas en la app.
Anulaciones por app del fabricante del dispositivo con pantalla grande
借助按应用替换项,设备制造商可以更改应用在大屏设备上的行为。例如,FORCE_RESIZE_APP 替换项会指示系统调整应用大小以适应显示屏尺寸(避免进入尺寸兼容模式),即使在应用清单中设置了 resizeableActivity="false" 也是如此。
替换项旨在改善大屏设备上的用户体验。
借助新的清单属性,您可以为应用停用某些设备制造商替换项。
Anulaciones por app para usuarios de pantallas grandes
Las anulaciones por app cambian el comportamiento de las apps en dispositivos con pantallas grandes. Por ejemplo, la anulación del fabricante del dispositivo OVERRIDE_MIN_ASPECT_RATIO_LARGE establece la relación de aspecto de la app en 16:9, independientemente de su configuración.
QPR1 de Android 14 permite que los usuarios apliquen anulaciones por app a través de un nuevo menú de configuración en dispositivos con pantalla grande.
Compartir pantalla de una app
借助应用界面共享功能,用户可以在录制屏幕内容时共享应用窗口,而不是整个设备屏幕。
在应用屏幕共享模式下,状态栏、导航栏、通知和其他系统界面元素会从共享显示屏中排除。系统只会分享所选应用的内容。
应用屏幕共享功能可让用户运行多个应用,但将内容共享限制为单个应用,从而提高工作效率并保护隐私。
Respuesta inteligente potenciada por LLM en Gboard en el Pixel 8 Pro
En los dispositivos Pixel 8 Pro con la actualización de funciones de diciembre, los desarrolladores pueden probar respuestas inteligentes de mayor calidad en Gboard con la tecnología de modelos de lenguaje grandes (LLM) integrados en el dispositivo que se ejecutan en Google Tensor.
Esta función está disponible como versión preliminar limitada para inglés de EE.UU. en WhatsApp, Line y KakaoTalk. Requiere el uso de un dispositivo Pixel 8 Pro con Gboard como teclado.
Para probarlo, primero habilita la función en Configuración > Opciones para desarrolladores > Configuración de AICore > Habilitar Aicore persistente.
A continuación, abre una conversación en una app compatible para ver la respuesta inteligente potenciada por LLM en la barra de sugerencias de Gboard en respuesta a los mensajes entrantes.
Gráficos
Las rutas de acceso son consultables e interpolables
La API de Path de Android es un mecanismo potente y flexible para crear y renderizar gráficos vectoriales, con la capacidad de dibujar o rellenar una ruta, construir una ruta a partir de segmentos de línea o curvas cuadráticas o cúbicas, realizar operaciones booleanas para obtener formas aún más complejas o todas estas acciones de forma simultánea. Una limitación es la capacidad de descubrir lo que hay realmente en un objeto Path; los componentes internos del objeto son opacos para los llamadores después de su creación.
Para crear un Path, debes llamar a métodos como moveTo(), lineTo() y cubicTo() para agregar segmentos de ruta. Sin embargo, no hay forma de preguntarle a esa ruta cuáles son los segmentos, por lo que debes conservar esa información en el momento de la creación.
A partir de Android 14, puedes consultar rutas de acceso para descubrir su contenido.
Primero, debes obtener un objeto PathIterator con la API de 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();
A continuación, puedes llamar a PathIterator para iterar a través de los segmentos uno por uno y recuperar todos los datos necesarios de cada segmento. En este ejemplo, se usan objetos PathIterator.Segment, que agrupan los datos por ti:
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 también tiene una versión de next() no asignable en la que puedes pasar un búfer para contener los datos de puntos.
Uno de los casos de uso importantes para consultar datos de Path es la interpolación. Por ejemplo, podrías animar (o transformar) entre dos rutas diferentes. Para simplificar aún más ese caso de uso, Android 14 también incluye el método interpolate() en Path. Si suponemos que las dos rutas de acceso tienen la misma estructura interna, el método interpolate() crea un Path nuevo con ese resultado interpolado. En este ejemplo, se muestra una ruta cuya forma está incompleta (una interpolación lineal de 0.5) entre path y 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); }
La biblioteca graphics-path de Jetpack también habilita APIs similares para versiones anteriores de Android.
Mallas personalizadas con sombreadores de vértices y fragmentos
Android admite desde hace mucho tiempo el dibujo de mallas de triángulos con sombreado personalizado, pero el formato de malla de entrada se limitó a algunas combinaciones de atributos predefinidos. Android 14 agrega compatibilidad con mallas personalizadas, que se pueden definir como triángulos o tiras de triángulos, y, de manera opcional, se pueden indexar. Estas mallas se especifican con atributos personalizados, pasos de vértices, variaciones y sombreadores de vértices y fragmentos escritos en AGSL.
El sombreador de vértices define las variaciones, como la posición y el color, mientras que el sombreador de fragmentos puede definir de manera opcional el color del píxel, por lo general, con las variaciones creadas por el sombreador de vértices. Si el sombreador de fragmentos proporciona el color, se combina con el color Paint actual con el modo de combinación seleccionado cuando se dibuja la malla. Los uniformes se pueden pasar a los sombreadores de fragmentos y vértices para obtener mayor flexibilidad.
Procesador de búfer de hardware para Canvas
协助使用 Android 的 Canvas API 通过
硬件加速至 HardwareBuffer、Android 14
引入了 HardwareBufferRenderer。如果您的用例涉及通过 SurfaceControl 与系统合成器通信以实现低延迟绘制,此 API 特别有用。