Mostrar GIFs animados

Os GIFs animados melhoram a comunicação e a autoexpressão, adicionando um elemento dinâmico e envolvente às conversas que permite aos usuários transmitir emoções, reações e humor de maneira mais eficaz do que imagens estáticas ou texto sozinho. A popularidade dos GIFs na cultura on-line torna a integração deles essencial para permanecer relevante e atraente para os usuários que esperam recursos modernos e uma experiência multimídia rica.

Exibir um GIF animado usando uma biblioteca de carregamento de imagens

As bibliotecas de carregamento de imagens fazem grande parte do trabalho pesado para você, geralmente adicionando suporte com compatibilidade com versões anteriores para recursos como GIFs animados. O código abaixo demonstra como implementar a reprodução de GIFs animados usando a biblioteca de carregamento de imagens do Coil:

Adicione a dependência da Coil para o GIF:

implementation("io.coil-kt:coil-gif:2.6.0")

Crie o carregador com suporte a GIF usando o ImageDecoder da plataforma, adicionado no Android 9 (nível 28 da API), e o GifDecoder da Coil para compatibilidade com versões anteriores:

val gifEnabledLoader = ImageLoader.Builder(this)
    .components {
        if ( SDK_INT >= 28 ) {
            add(ImageDecoderDecoder.Factory())
        } else {
            add(GifDecoder.Factory())
        }
    }.build()

Use o gifEnabledLoader no elemento combinável AsyncImage da Coil:

AsyncImage(
    imageLoader = gifEnabledLoader,
    ...
)

Mostrar um GIF animado usando o suporte da plataforma Android

AsyncImage(
     model = request,
     imageLoader = videoEnabledLoader,
     contentDescription = null
 )

O Android 9 e versões mais recentes (nível 28 da API) têm suporte integrado a arquivos GIF animados. Com um da biblioteca Accompanist, o Jetpack Compose pode execute essas animações com apenas algumas linhas de código.

Adicionar a dependência da biblioteca Accompanist para oferecer suporte a painters drawable:

implementation("com.google.accompanist:accompanist-drawablepainter:0.35.0-alpha")

Crie um método que carregue o GIF animado em um AnimatedImageDrawable usando o ImageDecoder:

private fun createAnimatedImageDrawableFromImageDecoder(context: Context, uri: Uri): AnimatedImageDrawable {
    val source = ImageDecoder.createSource(context.contentResolver, uri)
    val drawable = ImageDecoder.decodeDrawable(source)
    return drawable as AnimatedImageDrawable
}

Use o rememberDrawablePainter com o AnimatedImageDrawable:

Image(
    painter = rememberDrawablePainter(
        drawable = createAnimatedImageDrawableFromImageDecoder(applicationContext, mediaUri)),
     contentDescription = "animated gif"
)

Suporte a arquivos GIF de teclados de imagem e outros conteúdos ricos

Os arquivos GIF animados são recursos populares em muitos teclados Android, incluindo o Gboard do Google. A forma atualmente recomendada de dar suporte a qualquer tipo adesivo ou animação, seja do método de entrada ou de outro é usar um OnReceiveContentListener.

Consulte Receber conteúdo rico para saber mais sobre como implementar o suporte para receber animações GIF e outros rich media no seu app.