O Android 14 introduz ótimos recursos e APIs para desenvolvedores. As informações a seguir ajudam você a saber mais sobre os recursos dos seus apps e a começar a usar as APIs relacionadas.
Para uma lista detalhada de APIs adicionadas, modificadas e removidas, leia o Relatório de diferenças da API. Para conferir detalhes sobre as APIs adicionadas, acesse a Referência da API do Android. No Android 14, procure APIs que foram adicionadas no nível 34. Para saber mais sobre as áreas em que as mudanças na plataforma podem afetar seus apps, confira as mudanças de comportamento do Android 14 para apps destinados ao Android 14 e para todos os apps.
Internacionalização
Seleção de idioma por app
O Android 14 expande os recursos de linguagem por app lançados no Android 13 (API de nível 33) com estes recursos extras:
Gerar automaticamente o
localeConfig
de um app: a partir do Android Studio Giraffe Canary 7 e do AGP 8.1.0-alpha07, é possível configurar seu app para oferecer suporte a seleção de idioma por app automaticamente. Com base nos recursos do projeto, o Plug-in do Android para Gradle gera o arquivoLocaleConfig
e adiciona uma referência a ele no arquivo de manifesto final. Assim, não é mais necessário criar ou atualizar o arquivo manualmente. O AGP usa os recursos nas pastasres
dos módulos do app e qualquer dependência de módulos de biblioteca para determinar as localidades que serão incluídas no arquivoLocaleConfig
.Atualizações dinâmicas para o
localeConfig
de um app: use os métodossetOverrideLocaleConfig()
egetOverrideLocaleConfig()
emLocaleManager
para atualizar dinamicamente a lista de idiomas com suporte no app nas configurações do sistema do dispositivo. Use essa flexibilidade para personalizar a lista de idiomas com suporte por região, executar experimentos A/B ou fornecer uma lista atualizada de localidades se o app usar pushes do lado do servidor para localização.Visibilidade do idioma do app para Editores de método de entrada (IMEs): os IMEs podem usar o método
getApplicationLocales()
para conferir o idioma do app atual e associar o idioma do IME a ele.
API Grammatical Inflection
Três bilhões de pessoas falam idiomas com marcação de gênero: idiomas em que categorias gramaticais, como substantivos, verbos, adjetivos e preposições, mudam de acordo com o gênero das pessoas e os objetos sobre os quais elas falam. Tradicionalmente, vários idiomas com marcação de gênero usam o gênero gramatical masculino como padrão ou genérico.
Referir-se a usuários no gênero gramatical errado, como falar com uma mulher no gênero gramatical masculino, pode afetar negativamente o desempenho e a atitude dela. Por outro lado, uma interface com linguagem que reflete corretamente o gênero gramatical do usuário pode melhorar o engajamento e fornecer uma experiência do usuário mais personalizada e natural.
Para ajudar a criar uma interface focada no usuário para idiomas com flexão de gênero, o Android 14 apresenta a API Grammatical Inflection, que permite adicionar suporte aos gêneros gramaticais sem refatorar o app.
Preferências regionais
As preferências regionais permitem que os usuários personalizem unidades de temperatura, o primeiro dia da semana e sistemas de numeração. Um europeu que mora nos Estados Unidos pode preferir que as unidades de temperatura estejam em Celsius em vez de Fahrenheit e que apps tratem a segunda-feira como o início da semana, em vez do padrão dos EUA de usar o domingo.
Os novos menus de configurações do Android para essas preferências oferecem aos usuários um
local detectável e centralizado para mudar as preferências do app. Essas
preferências também são mantidas com backup e restauração. Várias APIs e
intents (como
getTemperatureUnit
e
getFirstDayOfWeek
)
permitem que o app acesse as preferências do usuário, ajustando a forma como as informações
são exibidas. Também é possível registrar um
BroadcastReceiver
em
ACTION_LOCALE_CHANGED
para processar mudanças de configuração de localidade quando as preferências regionais mudam.
Para encontrar essas configurações, abra o app Configurações e navegue até Sistema > Idiomas e entrada > Preferências regionais.
![](https://developer.android.com/static/about/versions/14/images/regional-preferences.png?authuser=9&hl=pt-br)
![](https://developer.android.com/static/about/versions/14/images/regional-preferences-temperature.png?authuser=9&hl=pt-br)
Acessibilidade
Dimensionamento de fonte não linear para 200%
No Android 14 e versões mais recentes, o sistema oferece suporte ao escalonamento de fontes até 200%, oferecendo aos usuários com baixa visão outras opções de acessibilidade alinhadas às Diretrizes de Acessibilidade para Conteúdo Web (WCAG, na sigla em inglês).
Para evitar que elementos de texto grandes na tela fiquem grandes demais, o sistema aplica uma curva de dimensionamento não linear. Essa estratégia significa que textos grandes não são dimensionados na mesma taxa que os menores. O dimensionamento de fonte não linear ajuda a preservar a hierarquia proporcional entre elementos de tamanhos diferentes, reduzindo problemas com o dimensionamento linear em graus elevados, como cortes de texto ou dificuldade de leitura devido a telas muito grandes.
Testar o app com dimensionamento de fontes não linear
![](https://developer.android.com/static/images/about/versions/14/accessibility-font-options.png?authuser=9&hl=pt-br)
Se você já usa unidades de pixels dimensionados (sp, na sigla em inglês) para definir o dimensionamento do texto, essas outras opções e melhorias de dimensionamento são aplicadas automaticamente ao texto do app. No entanto, ainda é necessário realizar testes de interface com o tamanho máximo da fonte ativado (200%) para garantir que o app aplique os tamanhos de fonte corretamente e possa acomodar fontes maiores sem afetar a usabilidade.
Para ativar o tamanho de fonte de 200%, siga estas etapas:
- Abra o app Configurações e navegue até Acessibilidade > Texto e tamanho de exibição.
- Na opção Tamanho da fonte, toque no ícone de adição (+) até ativar a configuração de tamanho máximo de fonte, conforme mostrado na imagem que acompanha esta seção.
Usar unidades de pixels dimensionados (sp) para tamanhos de texto
Sempre especifique tamanhos de texto em unidades de sp. Quando o app usa unidades de sp, o Android pode aplicar o tamanho de texto preferencial do usuário e escaloná-lo adequadamente.
Não use unidades de sp para preenchimento ou defina as alturas da visualização presumindo que o padding implícito: com o dimensionamento de fonte não linear, as dimensões de sp podem não ser proporcionais. Portanto, 4sp + 20sp podem não ser iguais a 24sp.
Converter unidades de pixels dimensionados
Use TypedValue.applyDimension()
para converter unidades de sp
em pixels, e TypedValue.deriveDimension()
para
converter pixels em sp. Esses métodos aplicam a curva de dimensionamento não linear adequada
automaticamente.
Evite equações fixadas no código usando
Configuration.fontScale
ou
DisplayMetrics.scaledDensity
. Como o dimensionamento da fonte não é
linear, o campo scaledDensity
não é mais preciso. O campo fontScale
precisa ser usado apenas para fins informativos porque as fontes não são mais
escalonadas com um único valor escalar.
Usar unidades sp para lineHeight
Sempre defina android:lineHeight
usando unidades sp em vez
de dp, para que a altura da linha seja dimensionada de acordo com o texto. Caso contrário, se o texto
for sp, mas a lineHeight
estiver em dp ou px, ele não será dimensionado e parecerá apertado.
A TextView corrige automaticamente a lineHeight
para que as proporções
pretendidas sejam preservadas, mas somente se textSize
e lineHeight
forem
definidos em unidades sp.
Câmera e mídia
Ultra HDR para imagens
![](https://developer.android.com/static/images/about/versions/14/SDR-HDR-compare.png?authuser=9&hl=pt-br)
O Android 14 adiciona suporte a imagens de High Dynamic Range (HDR) que retêm mais informações do sensor ao tirar uma foto, o que permite cores vibrantes e maior contraste. O Android usa o formato Ultra HDR, que é totalmente compatível com versões anteriores de imagens JPEG, permitindo que os apps interoperem perfeitamente com imagens HDR, exibindo-as no intervalo dinâmico padrão (SDR, na sigla em inglês) conforme necessário.
A renderização em HDR dessas imagens na interface é feita automaticamente pelo framework
quando o app aceita o uso da interface HDR na janela de atividade, seja por uma
entrada de manifesto ou durante a execução, chamando
Window.setColorMode()
. Também é possível capturar imagens estáticas Ultra
HDR compactadas em dispositivos com suporte. Com mais cores extraídas
do sensor, a edição na postagem pode ser mais flexível. A
Gainmap
associada a imagens Ultra HDR pode ser usada para renderizá-las
usando OpenGL ou Vulkan.
Zoom, foco, pós-visualização e muito mais nas extensões da câmera
O Android 14 faz upgrade e melhora as extensões da câmera, permitindo que os apps lidem com tempos de processamento mais longos, possibilitando imagens aprimoradas usando algoritmos de computação intensiva, como fotografia com pouca luz em dispositivos com suporte. Esses recursos oferecem aos usuários uma experiência ainda mais robusta ao usar os recursos de extensão da câmera. Exemplos dessas melhorias incluem:
- A estimativa de latência do processamento de captura dinâmica fornece
estimativas de latência muito mais precisas com base no cenário atual e nas
condições do ambiente. Chame
CameraExtensionSession.getRealtimeStillCaptureLatency()
para receber um objetoStillCaptureLatency
que tenha dois métodos de estimativa de latência. O métodogetCaptureLatency()
retorna a latência estimada entreonCaptureStarted
eonCaptureProcessStarted()
, e o métodogetProcessingLatency()
retorna a latência estimada entreonCaptureProcessStarted()
e o frame processado final disponível. - Suporte a callbacks de progresso de captura para que os apps possam mostrar o progresso atual
de operações de processamento de longa duração em captura ainda. Você pode conferir
se esse recurso está disponível com
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable
e, se estiver, implementar o callbackonCaptureProcessProgressed()
, que tem o progresso (de 0 a 100) transmitido como um parâmetro. Metadados específicos da extensão, como
CaptureRequest.EXTENSION_STRENGTH
, para indicar a quantidade de um efeito de extensão, como a quantidade de desfoque do plano de fundo comEXTENSION_BOKEH
.Recurso de pós-visualização para captura estática em extensões de câmera, que fornece uma imagem menos processada mais rapidamente do que a imagem final. Se uma extensão tiver aumentado a latência de processamento, uma imagem de pós-visualização poderá ser fornecida como um marcador de posição para melhorar a UX e alterada mais tarde para a imagem final. Confira se esse recurso está disponível com o
CameraExtensionCharacteristics.isPostviewAvailable
. Em seguida, você pode transmitir umOutputConfiguration
paraExtensionSessionConfiguration.setPostviewOutputConfiguration
.O suporte a
SurfaceView
, que permite um caminho de renderização de visualização mais otimizado e econômico.Suporte ao recurso "toque para focar" e aplicar zoom durante o uso da extensão.
Zoom no sensor
Quando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE
em
CameraCharacteristics
contiver
SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
, seu app
poderá usar recursos avançados de sensor para dar a um stream RAW cortado os mesmos
pixels do campo de visão completo, usando um CaptureRequest
com um destino RAW que tenha o caso de uso de stream definido como
CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
.
Ao implementar os controles de substituição de solicitação, a câmera atualizada oferece aos usuários
controle de zoom mesmo antes que outros controles da câmera estejam prontos.
Áudio USB sem perdas
O Android 14 ganha suporte a formatos de áudio sem perdas para experiências a nível de audiófilo
em fones de ouvido com fio USB. Você pode consultar um dispositivo USB para os
atributos preferidos de mixer, registrar um listener para mudanças nos atributos
de mixer preferidos e configurar os atributos usando a
classe AudioMixerAttributes
. Essa classe representa o
formato, como a máscara de canal, a taxa de amostragem e o comportamento do mixer de áudio. A
classe permite que o áudio seja enviado diretamente, sem mixagem,
ajuste de volume ou efeitos de processamento.
Produtividade e ferramentas para desenvolvedores
Credential Manager
O Android 14 adiciona o Gerenciador de credenciais como uma API de plataforma, com suporte extra a dispositivos Android 4.4 (nível 19 da API) usando uma Biblioteca Jetpack usando o Google Play Services. O objetivo do Gerenciador de credenciais é facilitar o login para usuários com APIs que recuperam e armazenam credenciais com provedores de credenciais configurados pelo usuário. O Gerenciador de credenciais oferece suporte a vários métodos de login, incluindo nome de usuário e senha, chaves de acesso e soluções de login federadas (como o recurso "Fazer login com o Google") em uma única API.
As chaves de acesso oferecem muitas vantagens. Por exemplo, as chaves de acesso são criadas com base nos padrões do setor e podem funcionar em diferentes sistemas operacionais e ecossistemas de navegadores e podem ser usadas em sites e apps.
Para saber mais, consulte a documentação do Gerenciador de credenciais e chaves de acesso e a postagem do blog sobre o Gerenciador de credenciais e chaves de acesso.
Conexão Saúde
A Conexão Saúde é um repositório no dispositivo para dados de saúde e condicionamento físico do usuário. Ele permite que os usuários compartilhem dados entre os apps favoritos deles, com um único local para controlar quais dados querem compartilhar com esses apps.
Em dispositivos com versões do Android anteriores à 14, a Conexão Saúde está disponível para download como um app na Google Play Store. No Android 14 e versões mais recentes, a Conexão Saúde faz parte da plataforma e recebe atualizações do sistema do Google Play sem exigir um download separado. Com isso, a Conexão Saúde pode ser atualizada com frequência, e seus apps podem confiar que ela esteja disponível em dispositivos com o Android 14 ou mais recente. Os usuários podem acessar o app Conexão Saúde nas configurações do dispositivo, com controles de privacidade integrados às configurações do sistema.
![](https://developer.android.com/static/images/about/versions/14/health-connect-screen.png?authuser=9&hl=pt-br)
![](https://developer.android.com/static/images/about/versions/14/health-connect-permissions.png?authuser=9&hl=pt-br)
A Conexão Saúde inclui vários novos recursos no Android 14, como trajetos de exercícios para que os usuários possam compartilhar um trajeto do treino, que pode ser visualizado em um mapa. Um trajeto é definido como uma lista de locais salvos em uma janela de tempo, e seu app pode inserir trajetos em sessões de exercícios, vinculando-os. Para garantir que os usuários tenham controle total sobre esses dados sensíveis, eles precisam permitir o compartilhamento de rotas individuais com outros apps.
Para mais informações, consulte a documentação da Conexão Saúde e a postagem do blog sobre Novidades no Android Health (link em inglês).
Atualizações do OpenJDK 17
O Android 14 continua o trabalho de atualizar as principais bibliotecas do Android para se alinhar aos recursos das versões mais recentes do LTS do OpenJDK, incluindo atualizações de bibliotecas e suporte à linguagem Java 17 para desenvolvedores de apps e plataformas.
Os seguintes recursos e melhorias estão incluídos:
- Aproximadamente 300 classes
java.base
foram atualizadas para oferecer suporte ao Java 17. - Blocos de texto, que introduzem literais de string de várias linhas à linguagem de programação Java.
- Correspondência de padrão para instanceof, que permite que um objeto
seja tratado como um tipo específico em uma
instanceof
sem nenhuma outra variável. - Classes seladas, que permitem restringir quais classes e interfaces podem estender ou implementar essas classes.
Graças às atualizações do sistema do Google Play (Projeto Mainline), mais de 600 milhões de dispositivos podem receber as atualizações mais recentes do Android Runtime (ART), que incluem essas mudanças. Isso faz parte do nosso compromisso de oferecer aos apps um ambiente mais consistente e seguro em todos os dispositivos, com novos recursos para os usuários, independente da versão da plataforma.
Java e OpenJDK são marcas registradas da Oracle e/ou afiliadas.
Melhorias para app stores
O Android 14 apresenta várias APIs PackageInstaller
que
permitem que as app stores melhorem a experiência do usuário.
Solicitar aprovação da instalação antes do download
A instalação ou atualização de um app pode exigir a aprovação do usuário.
Por exemplo, quando um instalador usando a permissão
REQUEST_INSTALL_PACKAGES
tenta instalar um
novo app. Nas versões anteriores do Android, as app stores só podem solicitar a aprovação do usuário
depois que os APKs são gravados na sessão de instalação e a
sessão é confirmada.
No Android 14 e versões mais recentes, o método requestUserPreapproval()
permite que os instaladores solicitem a aprovação do usuário antes de confirmar a sessão
de instalação. Essa melhoria permite que a app store adie o download de APKs até
que a instalação seja aprovada pelo usuário. Além disso, depois que um usuário
aprova a instalação, a app store pode fazer o download e instalar o app em
segundo plano sem interromper o usuário.
Reivindicar a responsabilidade por atualizações futuras
O método setRequestUpdateOwnership()
permite que um instalador
indique ao sistema que pretende ser responsável por futuras atualizações
de um app que ele está instalando. Esse recurso permite a aplicação da atualização
de propriedade, o que significa que apenas o proprietário da atualização tem permissão
para instalar atualizações automáticas no app. A aplicação da atualização de propriedade ajuda a
garantir que os usuários recebam atualizações apenas da app store esperada.
Qualquer outro instalador, incluindo aqueles que usam a permissão
INSTALL_PACKAGES
, precisa receber aprovação explícita
do usuário para instalar uma atualização. Se um usuário decidir continuar com uma
atualização de outra fonte, a propriedade da atualização será perdida.
Atualizar apps em momentos menos incômodos
Geralmente, as app stores não querem atualizar um app que está em uso, porque isso encerra os processos em execução e pode interromper o que o usuário está fazendo.
No Android 14 e versões mais recentes, a API InstallConstraints
oferece aos instaladores uma maneira de garantir que as atualizações do app ocorram em um momento
oportuno. Por exemplo, uma app store pode chamar o método
commitSessionAfterInstallConstraintsAreMet()
para
garantir que uma atualização só seja confirmada quando o usuário não estiver mais
interagindo com o app em questão.
Instalar divisões opcionais de forma simples
Com os APKs divididos, os recursos de um app podem ser enviados em arquivos APK separados
em vez de como um APK monolítico. Os APKs divididos permitem que as app stores otimizem a
entrega de diferentes componentes do app. Por exemplo, app stores podem otimizar
com base nas propriedades do dispositivo de destino. A API
PackageInstaller
oferece suporte a divisões desde que foi
introduzida no nível 22 da API.
No Android 14, o método setDontKillApp()
permite que um
instalador indique que os processos em execução do app não serão encerrados quando
novas divisões forem instaladas. As app stores podem usar esse recurso para instalar
novos recursos enquanto o usuário está usando o app.
Pacotes de metadados do app
No Android 14 e versões mais recentes, o instalador do pacote do Android permite especificar metadados do app, por exemplo, práticas de segurança de dados, para incluir em páginas de app stores, como o Google Play.
Detectar quando usuários fazem capturas de tela no dispositivo
Para criar uma experiência mais padronizada para detectar capturas de tela, o Android 14 apresenta uma API de detecção de capturas de tela que preserva a privacidade. Ela permite que os apps registrem callbacks por atividade. Esses callbacks são invocados, e o usuário é notificado quando faz uma captura de tela enquanto a atividade está visível.
Experiência do usuário
Ações personalizadas e melhoria na classificação do Sharesheet
O Android 14 atualiza o Sharesheet do sistema para oferecer suporte a ações personalizadas do app e resultados de visualização mais informativos para os usuários.
Adicionar ações personalizadas
Com o Android 14, o app pode adicionar ações personalizadas ao Sharesheet do sistema que invoca.
![](https://developer.android.com/static/images/training/sharing/sharesheet_custom_actions.png?authuser=9&hl=pt-br)
Melhorar a classificação dos alvos de compartilhamento direto
O Android 14 usa mais indicadores de apps para determinar a classificação dos alvos de compartilhamento diretos a fim de apresentar resultados mais úteis para o usuário. Para fornecer o indicador mais útil para a classificação, siga as orientações para melhorar a classificação das suas segmentações de compartilhamento direto. Os apps de comunicação também podem informar o uso de atalhos para mensagens enviadas e recebidas.
![](https://developer.android.com/static/training/sharing/direct-share-targets.png?authuser=9&hl=pt-br)
Suporte a animações de voltas preditivas integradas e personalizadas
O Android 13 introduziu a animação de volta preditiva à tela inicial por trás de uma opção do desenvolvedor. Quando usada em um app com suporte para a opção para desenvolvedor ativada, deslizar para trás mostra uma animação indicando que o gesto de retorno sai do app de volta à tela inicial.
O Android 14 inclui várias melhorias e novas orientações para a volta preditiva:
- Você pode configurar
android:enableOnBackInvokedCallback=true
para ativar as animações do sistema de volta preditiva por atividade em vez de para todo o app. - Adicionamos novas animações do sistema para acompanhar a animação de retorno à tela inicial do Android 13. As novas animações do sistema são entre atividades e tarefas, que são recebidas automaticamente após a migração para a volta preditiva.
- Adicionamos novas animações do componente Material Design para páginas inferiores, páginas laterais e pesquisa.
- Desenvolvemos orientações de design para a criação de transições e animações personalizadas no app.
- Adicionamos novas APIs para oferecer suporte a animações de transição personalizadas no app:
handleOnBackStarted
,handleOnBackProgressed
,handleOnBackCancelled
in
OnBackPressedCallback
onBackStarted
,onBackProgressed
,onBackCancelled
in
OnBackAnimationCallback
- Use
overrideActivityTransition
em vez deoverridePendingTransition
para transições que respondem à medida que o usuário desliza de volta.
Com esta versão de pré-lançamento do Android 14, todos os recursos de volta preditiva permanecem por trás de uma opção para desenvolvedores. Consulte o guia do desenvolvedor para migrar seu app para a volta preditiva e o guia do desenvolvedor para criar transições personalizadas no app.
Substituições por app do fabricante de dispositivos de tela grande
As substituições por app permitem que os fabricantes mudem o comportamento de apps em dispositivos de tela grande. Por exemplo, a substituição FORCE_RESIZE_APP
instrui o sistema a redimensionar o app para se ajustar às dimensões de exibição (evitando o modo de compatibilidade de tamanho), mesmo que resizeableActivity="false"
esteja definido no manifesto do app.
As substituições têm o objetivo de melhorar a experiência do usuário em telas grandes.
As novas propriedades do manifesto permitem desativar algumas substituições de fabricantes de dispositivos para o app.
Substituições por app de usuários em telas grandes
As substituições por app mudam o comportamento dos apps em dispositivos de tela grande. Por exemplo, a substituição do fabricante do dispositivo OVERRIDE_MIN_ASPECT_RATIO_LARGE
define a proporção do app como 16:9, independente da configuração dele.
O QPR1 do Android 14 permite que os usuários apliquem substituições por app usando um novo menu de configurações em dispositivos de tela grande.
Compartilhamento de tela de app
Com o compartilhamento de tela do app, os usuários podem compartilhar uma janela do app em vez da tela inteira do dispositivo durante a gravação do conteúdo da tela.
Com o compartilhamento de tela do app, a barra de status, a barra de navegação, as notificações e outros elementos da interface do sistema são excluídos da exibição compartilhada. Somente o conteúdo do app selecionado é compartilhado.
O compartilhamento de tela no app aumenta a produtividade e a privacidade porque permite que os usuários executem vários apps, mas limite o compartilhamento de conteúdo a um único app.
Resposta inteligente com LLM no Gboard no Pixel 8 Pro
Em dispositivos Pixel 8 Pro com a atualização de recursos de dezembro, os desenvolvedores podem testar respostas inteligentes de alta qualidade no Gboard com modelos de linguagem grandes (LLMs) executados no Google Tensor.
Esse recurso está disponível como uma visualização limitada em inglês americano no WhatsApp, Line e KakaoTalk. É necessário usar um dispositivo Pixel 8 Pro com o Gboard como teclado.
Para testá-lo, primeiro ative o recurso em Configurações > Opções do desenvolvedor > Configurações da AICore > Ativar Aicore Persistent.
Em seguida, abra uma conversa em um app com suporte para conferir a Resposta inteligente com tecnologia LLM na linha de sugestões do Gboard em resposta a mensagens recebidas.
Gráficos
Os caminhos podem ser consultados e interpolados
A API Path
do Android é um mecanismo poderoso e flexível para
criar e renderizar gráficos vetoriais, com a capacidade de traçar ou preencher
criar um caminho a partir de segmentos de reta ou curvas quadráticas ou cúbicas, realizar
operações booleanas para criar formas ainda mais complexas, ou todas elas
ao mesmo tempo. Uma limitação é a capacidade de descobrir o que há de fato em um
Objeto de caminho os componentes internos do objeto ficam opacos para os autores da chamada após a criação.
Para criar um Path
, chame métodos como
moveTo()
, lineTo()
e
cubicTo()
para adicionar segmentos de caminho. Mas não havia como
perguntar a esse caminho quais são os segmentos, portanto, você deve reter essas informações
data/hora da criação.
A partir do Android 14, é possível consultar caminhos para descobrir o que há dentro deles.
Primeiro, você precisa conseguir um objeto PathIterator
usando o
API Path.getPathIterator
:
Kotlin
val path = Path().apply { moveTo(1.0f, 1.0f) lineTo(2.0f, 2.0f) close() } val pathIterator = path.pathIterator
Java
Path path = new Path(); path.moveTo(1.0F, 1.0F); path.lineTo(2.0F, 2.0F); path.close(); PathIterator pathIterator = path.getPathIterator();
Em seguida, chame PathIterator
para iterar os segmentos.
uma a uma, recuperando todos os dados necessários para cada segmento. Neste exemplo,
usa objetos PathIterator.Segment
, que empacota os dados
para você:
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()); }
O PathIterator
também tem uma versão não alocada de next()
, em que você pode transmitir
em um buffer para armazenar os dados dos pontos.
Um dos casos de uso importantes para consultar os dados Path
é a interpolação. Para
exemplo, você pode querer animar (ou transformar) entre dois caminhos diferentes. Para
simplificando ainda mais esse caso de uso, o Android 14 também inclui a
Método interpolate()
em Path
. Supondo que os dois caminhos tenham
a mesma estrutura interna, o método interpolate()
cria um novo objeto Path
.
com esse resultado interpolado. Este exemplo retorna um caminho cujo formato é
metade (uma interpolação linear de 0,5) entre path
e 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); }
A biblioteca graphics-path do Jetpack permite APIs semelhantes para para as versões anteriores do Android.
Malhas personalizadas com sombreadores de vértice e fragmento
Há muito tempo, o Android oferece suporte ao desenho de malhas de triângulo com sombreamento personalizado, mas o formato da malha de entrada ficou limitado a algumas combinações de atributos predefinidas. O Android 14 adiciona suporte a malhas personalizadas, que podem ser definidas como triângulos ou tiras de triângulo e, opcionalmente, indexadas. Essas malhas são especificadas com atributos personalizados, passos de vértice, variações e sombreadores de vértice e fragmento escritos em AGSL.
O sombreador de vértice define as variações, como posição e cor, enquanto o
sombreador de fragmento pode, opcionalmente, definir a cor para o pixel, normalmente
usando as variações criadas pelo sombreador de vértice. Se a cor for fornecida pelo
sombreador de fragmento, ela será misturada com a cor Paint
atual usando o modo de mesclagem selecionado ao
desenhar a malha. Uniformes podem ser transmitidos
para o fragmento e sombreadores de vértice para maior flexibilidade.
Renderizador de buffer de hardware para o Canvas
Para ajudar a usar a API Canvas
do Android para desenhar com
aceleração de hardware em uma HardwareBuffer
, o Android 14
apresenta o HardwareBufferRenderer
. Essa API é
útil principalmente quando o caso de uso envolve a comunicação com o compositor
do sistema pelo SurfaceControl
para renderização
de baixa latência.