Quero exibir imagens GIF animadas em minha aplicação. Como descobri da maneira mais difícil, o Android não suporta GIF animado nativamente.
No entanto, ele pode exibir animações usando o AnimationDrawable :
Desenvolver> Guias> Imagens e gráficos> Visão geral de Drawables
O exemplo usa animação salva como quadros nos recursos do aplicativo, mas o que eu preciso é exibir gif animado diretamente.
Meu plano é dividir o GIF animado em quadros e adicionar cada quadro como extraível ao AnimationDrawable.
Alguém sabe como extrair quadros de GIF animado e converter cada um deles em Drawable ?
java
android
animated-gif
Leonti
fonte
fonte
Respostas:
O Android pode decodificar e exibir GIFs animados, usando a classe android.graphics.Movie.
Isso não está muito documentado, mas está na Referência do SDK . Além disso, é usado em exemplos no ApiDemos no exemplo BitmapDecode com algum sinalizador animado.
fonte
setLayerType(LAYER_TYPE_SOFTWARE)
no seu modo de exibição. Mas ainda funciona apenas para alguns gifs e para alguns dispositivos.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
trabalhou!ATUALIZAR:
Use planar:
uso:
ver documentos
fonte
coloque também (main / assets / htmls / name.gif) [com este html ajustado ao tamanho]
declare no seu XML por exemplo assim (main / res / layout / name.xml): [você define o tamanho, por exemplo]
em sua atividade, coloque o próximo código dentro do onCreate
se você deseja carregar dinamicamente, é necessário carregar a visualização da web com dados:
sugestão: é melhor carregar gif com imagens estáticas para obter mais informações, consulte https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
É isso, espero que você ajude.
fonte
Resolvi o problema dividindo animações gif em quadros antes de salvá-lo no telefone, para que eu não tivesse que lidar com isso no Android.
Em seguida, faço o download de todos os quadros no telefone, crio Drawable a partir dele e, em seguida, crio AnimationDrawable - muito semelhante ao exemplo da minha pergunta
fonte
eu encontrei uma maneira muito fácil, com um exemplo de trabalho simples e agradável aqui
exibir widget animado
Antes de fazê-lo funcionar, há algumas mudanças no código
NA SEQUÊNCIA
apenas substitua
no
E EM
Forneça seu próprio arquivo de animação gif
SUBSTITUIR A PRIMEIRA LINHA EM
de acordo com o nome da classe ...
depois de fazer essas pequenas mudanças, deve funcionar como para mim ...
espero que isso ajude
fonte
Maneiras de mostrar GIF animado no Android:
https://github.com/koral--/android-gif-drawable - o decodificador é implementado em C, por isso é muito eficiente.
https://code.google.com/p/giffiledecoder - o decodificador é implementado em Java, para facilitar o trabalho. Ainda razoavelmente eficiente, mesmo com arquivos grandes.
Você também encontrará muitas bibliotecas baseadas na classe GifDecoder. Esse também é um decodificador baseado em Java, mas funciona carregando o arquivo inteiro na memória, sendo aplicável apenas a arquivos pequenos.
fonte
Eu tive muita dificuldade em ter gifs animados trabalhando no Android. Eu só tinha dois trabalhos seguintes:
O WebView funciona bem e é muito fácil, mas o problema é que isso torna a exibição mais lenta e o aplicativo não responde por um segundo ou mais. Eu não gostei disso. Então, eu tentei abordagens diferentes (não funcionou):
Eu tive algumas idas e vindas com
Ion
; Finalmente, eu estou trabalhando, e é muito rápido :-)fonte
Glide 4.6
1. Para carregar gif
2. Para obter o objeto de arquivo
fonte
Glide
Biblioteca do Image Loader para Android, recomendada pelo Google.
O que esse Glide tem, mas Picasso não
A capacidade de carregar animação GIF em um simples ImageView pode ser o recurso mais interessante do Glide. E sim, você não pode fazer isso com Picasso. Alguns links importantes -
fonte
Use o ImageViewEx , uma biblioteca que torna o uso de um gif tão fácil quanto o uso de um
ImageView
.fonte
Tente isso, abaixo o código exibe o arquivo gif na barra de progresso
loading_activity.xml (na pasta Layout)
custom_loading.xml (na pasta extraível)
aqui eu coloquei black_gif.gif (na pasta drawable), você pode colocar seu próprio gif aqui
LoadingActivity.java (na pasta res)
fonte
Ninguém mencionou a biblioteca Ion ou Glide . eles funcionam muito bem.
É mais fácil de manusear em comparação com um WebView.
fonte
Tive sucesso com a solução proposta neste artigo , uma classe chamada
GifMovieView
, que renderiza umaView
que pode ser exibida ou adicionada a uma determinadaViewGroup
. Confira os outros métodos apresentados nas partes 2 e 3 do artigo especificado.A única desvantagem desse método é que o antialiasing no filme não é tão bom (deve ser um efeito colateral do uso da
Movie
classe Android "obscura" ). É melhor definir o plano de fundo para uma cor sólida no seu GIF animado.fonte
Algumas reflexões sobre o exemplo BitmapDecode ... Basicamente, ele usa a classe Movie antiga, mas bastante característica, de android.graphics. Nas versões recentes da API, você precisa desativar a aceleração de hardware, conforme descrito aqui . Caso contrário, foi um erro para mim.
Aqui está o exemplo BitmapDecode abreviado apenas com a parte GIF. Você precisa criar seu próprio Widget (Visualizar) e desenhá-lo sozinho. Não é tão poderoso quanto um ImageView.
2 outros métodos, um com o ImageView e outro com o WebView podem ser encontrados neste tutorial . O método ImageView usa o android-gifview licenciado pela Apache no Google Code.
fonte
@PointerNull deu uma boa solução, mas não é perfeita. Ele não funciona em alguns dispositivos com arquivos grandes e mostra animação GIF com bugs com frames delta na versão anterior ao ICS. Encontrei solução sem esses bugs. É uma biblioteca com decodificação nativa para drawable: android-gif-drawable da koral .
fonte
Coloque-o em um WebView, ele deve poder exibi-lo corretamente, pois o navegador padrão suporta arquivos gif. (Froyo +, se não me engano)
fonte
Existem duas opções para carregar gifs animados em nossos aplicativos Android
1) Usando Glide para carregar o gif em um
ImageView
.2) Usando um html para carregar o gif em um
WebView
Crie o html com o endereço para o arquivo .gif:
armazene esse arquivo no diretório de ativos:
Carregue este html no WebView do seu aplicativo:
Heres é um exemplo completo dessas duas opções .
fonte
Apenas para API Android (Android Pie) 28 e +
use AnimatedImageDrawable comoCódigo XML, adicione um ImageView
AnimatedImageDrawable
é um filho do Drawable e criado porImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
o que exigiu ainda a instância deImageDecoder.Source
criada porImageDecoder.createSource
.ImageDecoder.createSource
só pode usar origem como nome, ByteBuffer, File, resourceId, URI, ContentResolver para criar um objeto de origem e usá-lo para criarAnimatedImageDrawable
comoDrawable
(chamada polimórfica)Nota: Você também pode criar
Bitmap
usando o ImageDecoder # decodeBitmap .Resultado:
AnimatedDrawable também suporta redimensionamento, moldura e manipulação de cores
fonte
Eu acho que a melhor biblioteca para lidar com arquivos gif é esta: por koral
Usei e tenho sucesso e esta biblioteca é dedicada ao GIF'S; mas onde, como picasso e glide, são estruturas de imagem de uso geral ; então eu acho que os desenvolvedores desta biblioteca se concentraram inteiramente em arquivos gif
fonte
Use afresco. Veja como fazê-lo:
http://frescolib.org/docs/animations.html
Aqui está o repo com a amostra:
https://github.com/facebook/fresco/tree/master/samples/animation
Cuidado com afresco não suporta conteúdo de quebra automática!
fonte
Só queria acrescentar que a classe Movie agora está obsoleta.
Recomenda-se usar este
AnimatedImageDrawable
fonte
Crie um pacote chamado "Utils" na pasta src e crie uma classe chamada "GifImageView"
Agora defina GifImageView no arquivo MainActivity: src / activity / MainActivity.class
Agora arquivo de peça da interface do usuário: res / layout / activity_main.xml
Código de recurso: exemplo do Android
fonte
Primeiro, o navegador Android deve suportar GIFs animados. Se não, então é um bug! Dê uma olhada nos rastreadores de problemas.
Se você estiver exibindo esses GIFs animados fora de um navegador, pode ser uma história diferente. Para fazer o que você está pedindo, é necessária uma biblioteca externa que suporte a decodificação de GIFs animados.
A primeira porta de escala seria olhar para a API Java2D ou JAI (Java Advanced Imaging), embora eu ficaria muito surpreso se o Android Dalvik suportasse essas bibliotecas no seu aplicativo.
fonte
Semelhante ao que @Leonti disse, mas com um pouco mais de profundidade:
O que fiz para resolver o mesmo problema foi abrir o GIMP, ocultar todas as camadas, exceto uma, exportar como sua própria imagem, ocultar a camada e exibir a próxima, etc., até que eu tivesse arquivos de recursos individuais para cada uma. . Então eu poderia usá-los como quadros no arquivo XML AnimationDrawable.
fonte
Eu resolvi isso dividindo gif em quadros e usando a animação padrão do Android
fonte
Algo que fiz para mostrar gifs em aplicativos. Estendi o ImageView para que as pessoas possam usar seus atributos livremente. Ele pode mostrar gifs do URL ou do diretório de ativos. A biblioteca também facilita a herança de classes estendidas e a extensão para oferecer suporte a diferentes métodos para inicializar o gif.
https://github.com/Gavras/GIFView
Há um pequeno guia na página do github.
Também foi publicado no Android Arsenal:
https://android-arsenal.com/details/1/4947
Use exemplo:
Do XML:
Na atividade:
Configurando o gif programaticamente:
fonte
Maneira mais fácil - pode ser considerado o código abaixo
Podemos tirar proveito do Imageview setImageResource, consulte o código abaixo para o mesmo.
O código abaixo pode ser usado para mostrar a imagem como gif, caso você tenha a imagem dividida múltipla de gif. Basta dividir o gif em png individual a partir de uma ferramenta on-line e colocar a imagem no drawable como na ordem abaixo
image_1.png, image_2.png etc.
Tenha o manipulador para alterar a imagem dinamicamente.
fonte
A maneira mais fácil de exibir GIF animado diretamente do URL para o layout do aplicativo é usar a classe WebView.
Etapa 1: no seu layout XML
Etapa 2: em sua atividade
Etapa 3: No seu Manifest.XML, faça a permissão da Internet
Etapa 4: caso você queira tornar o plano de fundo do GIF transparente e ajustá-lo ao layout
fonte
Você pode usar a biblioteca GifAnimationDrawable encontrada neste link - https://github.com/Hipmob/gifanimateddrawable , e que converte qualquer gif em AnimationDrawable. Aproveitar :)
fonte
fonte