Quiero mostrar imágenes animadas GIF en mi aplicación. Como descubrí de la manera difícil, Android no admite GIF animado de forma nativa.
Sin embargo, puede mostrar animaciones usando AnimationDrawable :
Desarrollar> Guías> Imágenes y gráficos> Descripción general de Drawables
El ejemplo usa animación guardada como cuadros en los recursos de la aplicación, pero lo que necesito es mostrar gif animados directamente.
Mi plan es dividir el GIF animado en cuadros y agregar cada cuadro como dibujable a AnimationDrawable.
¿Alguien sabe cómo extraer marcos de GIF animados y convertir cada uno de ellos en Drawable ?
java
android
animated-gif
Leonti
fuente
fuente
Respuestas:
Android en realidad puede decodificar y mostrar GIF animados, usando la clase android.graphics.Movie.
Esto no está demasiado documentado, pero está en SDK Reference . Además, se usa en Muestras en ApiDemos en el ejemplo BitmapDecode con alguna bandera animada.
fuente
setLayerType(LAYER_TYPE_SOFTWARE)
en su Vista. Pero todavía solo funciona para algunos gifs y para algunos dispositivos.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
¡trabajó!ACTUALIZAR:
Usar deslizamiento:
uso:
ver documentos
fuente
también poner (main / assets / htmls / name.gif) [con este html ajustar al tamaño]
declare en su Xml, por ejemplo, así (main / res / layout / name.xml): [usted define el tamaño, por ejemplo]
en su Actividad ponga el siguiente código dentro de onCreate
si desea cargar dinámicamente, debe cargar la vista web con datos:
sugerencia: es mejor cargar gif con imágenes estáticas para obtener más información, consulte https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Eso es todo, espero que ayudes.
fuente
Resolví el problema dividiendo las animaciones gif en marcos antes de guardarlo en el teléfono, para no tener que lidiar con eso en Android.
Luego descargo cada fotograma en el teléfono, creo Drawable a partir de él y luego creo AnimationDrawable , muy similar al ejemplo de mi pregunta
fuente
Encontré una manera muy fácil, con un ejemplo de trabajo agradable y simple aquí
mostrar widget animado
Antes de que funcione, hay algunos cambios que hacer en el código
EN EL SIGUIENTE
solo reemplace
en
Y EN
Proporcione su propio archivo de animación gif
REEMPLAZA LA PRIMERA LÍNEA EN
según el nombre de la clase ...
después de hacer estos pequeños cambios, debería funcionar para mí ...
espero que esto ayude
fuente
Formas de mostrar GIF animados en Android:
https://github.com/koral--/android-gif-drawable : el decodificador se implementa en C, por lo que es muy eficiente.
https://code.google.com/p/giffiledecoder : el decodificador se implementa en Java, por lo que es más fácil trabajar con él. Sigue siendo razonablemente eficiente, incluso con archivos grandes.
También encontrará muchas bibliotecas basadas en la clase GifDecoder. También es un decodificador basado en Java, pero funciona cargando todo el archivo en la memoria, por lo que solo es aplicable a archivos pequeños.
fuente
Me costó mucho tener gif animados trabajando en Android. Solo tenía dos siguientes trabajando:
WebView funciona bien y es muy fácil, pero el problema es que hace que la vista se cargue más lentamente y la aplicación no responda por un segundo más o menos. A mi no me gusto eso. Así que probé diferentes enfoques (NO FUNCIONÓ):
Tuve un poco de ida y vuelta con
Ion
; Finalmente, lo tengo funcionando, y es realmente rápido :-)fuente
Glide 4.6
1. Para cargar gif
2. Para obtener el objeto de archivo
fuente
Glide
Image Loader Library para Android, recomendado por Google.
Lo que ese Glide tiene pero Picasso no
La capacidad más interesante de Glide es la capacidad de cargar Animación GIF en un simple ImageView. Y sí, no puedes hacer eso con Picasso. Algunos enlaces importantes
fuente
Use ImageViewEx , una biblioteca que hace que usar un gif sea tan fácil como usar un
ImageView
.fuente
Pruebe esto, debajo del archivo gif de visualización de código en la barra de progreso
loading_activity.xml (en la carpeta Diseño)
custom_loading.xml (en carpeta dibujable)
aquí pongo black_gif.gif (en una carpeta dibujable), puedes poner tu propio gif aquí
LoadingActivity.java (en la carpeta res)
fuente
Nadie ha mencionado la biblioteca Ion o Glide . Funcionan muy bien.
Es más fácil de manejar en comparación con un WebView.
fuente
He tenido éxito con la solución propuesta en este artículo , una clase llamada
GifMovieView
, que representa unaView
que luego se puede mostrar o agregar a una específicaViewGroup
. Consulte los otros métodos presentados en las partes 2 y 3 del artículo especificado.El único inconveniente de este método es que el antialiasing en la película no es tan bueno (debe ser un efecto secundario del uso de la
Movie
Clase Android "sombría" ). Entonces es mejor configurar el fondo a un color sólido dentro de su GIF animado.fuente
Algunas reflexiones sobre el ejemplo de BitmapDecode ... Básicamente usa la clase de película antigua, pero sin características de android.graphics. En versiones recientes de API, debe desactivar la aceleración de hardware, como se describe aquí . Fue segfaulting para mí de lo contrario.
Aquí está el ejemplo de BitmapDecode acortado con solo la parte GIF. Tienes que hacer tu propio Widget (Ver) y dibujarlo tú mismo. No es tan poderoso como un ImageView.
Se pueden encontrar otros 2 métodos, uno con ImageView y otro con WebView en este excelente tutorial . El método ImageView utiliza el Android-gifview con licencia de Apache de Google Code.
fuente
@PointerNull dio una buena solución, pero no es perfecta. No funciona en algunos dispositivos con archivos grandes y muestra animaciones GIF con errores con marcos delta en la versión pre ICS. Encontré solución sin estos errores. Es una biblioteca con decodificación nativa para dibujable : koral's android-gif-drawable .
fuente
Póngalo en un WebView, debe poder mostrarlo correctamente, ya que el navegador predeterminado admite archivos gif. (Froyo +, si no me equivoco)
fuente
Hay dos opciones para cargar gifs animados en nuestras aplicaciones de Android
1) Usando Glide para cargar el gif en un
ImageView
.2) Usar un html para cargar el gif en un
WebView
Cree el html con la dirección del archivo .gif:
almacene este archivo en el directorio de activos:
Cargue este html en el WebView de su aplicación:
Heres es un ejemplo completo de estas dos opciones .
fuente
Solo para Android API (Android Pie) 28 y +
utilizar AnimatedImageDrawable comoCódigo XML, agregue un ImageView
AnimatedImageDrawable
es hijo de Drawable y creado porImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
que además requería la instancia deImageDecoder.Source
creado porImageDecoder.createSource
.ImageDecoder.createSource
solo puede tomar la fuente como nombre, ByteBuffer, File, resourceId, URI, ContentResolver para crear el objeto fuente y lo usa para crearAnimatedImageDrawable
comoDrawable
(llamada polimórfica)Nota: También puede crear
Bitmap
usando ImageDecoder # decodeBitmap .Salida:
AnimatedDrawable también admite el cambio de tamaño, la manipulación de marcos y colores
fuente
Creo que la mejor biblioteca para manejar archivos gif es esta: por koral
Lo usé y tengo éxito y esta biblioteca está dedicada a GIF'S; pero donde como picasso y glide son marco de imagen de uso general ; así que creo que los desarrolladores de esta biblioteca se han concentrado completamente en archivos gif
fuente
Utiliza frescos. Aquí se explica cómo hacerlo:
http://frescolib.org/docs/animations.html
Aquí está el repositorio con la muestra:
https://github.com/facebook/fresco/tree/master/samples/animation
¡Cuidado con el fresco no admite contenido de envoltura!
fuente
Solo quería agregar que la clase Movie ahora está en desuso.
Se recomienda usar esto
AnimatedImageDrawable
fuente
Cree un paquete llamado "Utils" en la carpeta src y cree una clase llamada "GifImageView"
Ahora defina GifImageView en el archivo MainActivity: src / activity / MainActivity.class
Ahora archivo de parte de la interfaz de usuario: res / layout / activity_main.xml
Código Resourece: ejemplo de Android
fuente
En primer lugar, el navegador de Android debe admitir GIF animados. Si no es así, ¡es un error! Echa un vistazo a los rastreadores de problemas.
Si está mostrando estos GIF animados fuera de un navegador, podría ser una historia diferente. Hacer lo que está pidiendo requeriría una biblioteca externa que admita la decodificación de GIF animados.
El primer puerto de escala sería mirar la API Java2D o JAI (Java Advanced Imaging), aunque me sorprendería mucho si Android Dalvik admitiera esas bibliotecas en su aplicación.
fuente
Similar a lo que dijo @Leonti, pero con un poco más de profundidad:
Lo que hice para resolver el mismo problema fue abrir GIMP, ocultar todas las capas excepto una, exportarla como su propia imagen, y luego ocultar esa capa y mostrar la siguiente, etc., hasta que tuviera archivos de recursos individuales para cada una. . Entonces podría usarlos como cuadros en el archivo XML AnimationDrawable.
fuente
Resolví esto al dividir gif en marcos y usar animación estándar de Android
fuente
Algo que hice para mostrar gifs en aplicaciones. Extendí ImageView para que las personas puedan usar sus atributos libremente. Puede mostrar gifs desde url o desde el directorio de activos. La biblioteca también facilita la extensión de las clases para heredar de ella y la extiende para admitir diferentes métodos para inicializar el gif.
https://github.com/Gavras/GIFView
Hay una pequeña guía en la página de Github.
También se publicó en Android Arsenal:
https://android-arsenal.com/details/1/4947
Use ejemplo:
De XML:
En la actividad:
Configurar el gif mediante programación:
fuente
La forma más fácil: se puede considerar el siguiente código
Podemos aprovechar Imageview setImageResource, consulte el siguiente código para el mismo.
El siguiente código se puede usar para mostrar la imagen como gif en caso de que tenga la imagen dividida múltiple de gif. Simplemente divida el gif en png individual desde una herramienta en línea y coloque la imagen en el dibujo como en el siguiente orden
image_1.png, image_2.png, etc.
Tener el controlador para cambiar la imagen dinámicamente.
fuente
La manera fácil de mostrar GIF animados directamente desde la URL al diseño de su aplicación es usar la clase WebView.
Paso 1: en su diseño XML
Paso 2: en tu actividad
Paso 3: En su Manifiesto.XML, haga permiso en Internet
Paso 4: en caso de que desee que su fondo GIF sea transparente y que el GIF se ajuste a su diseño
fuente
Puede usar la biblioteca GifAnimationDrawable que se encuentra en este enlace: https://github.com/Hipmob/gifanimateddrawable , y que convierte cualquier gif a AnimationDrawable. Disfruta :)
fuente
fuente