Je souhaite afficher des images GIF animées dans mon application. Comme je l'ai découvert, Android ne prend pas en charge nativement les GIF animés.
Cependant, il peut afficher des animations en utilisant AnimationDrawable :
Développer> Guides> Images et graphiques> Présentation de Drawables
L'exemple utilise une animation enregistrée sous forme de cadres dans les ressources de l'application, mais ce dont j'ai besoin est d'afficher directement le gif animé.
Mon plan est de diviser le GIF animé en images et d'ajouter chaque image comme dessinable à AnimationDrawable.
Quelqu'un sait-il comment extraire des images d'un GIF animé et convertir chacune d'elles en Drawable ?
java
android
animated-gif
Leonti
la source
la source
Réponses:
Android peut réellement décoder et afficher des GIF animés, en utilisant la classe android.graphics.Movie.
Ce n'est pas trop documenté, mais c'est dans la référence SDK . De plus, il est utilisé dans les exemples dans ApiDemos dans l' exemple BitmapDecode avec un indicateur animé.
la source
setLayerType(LAYER_TYPE_SOFTWARE)
sur votre vue. Mais cela ne fonctionne toujours que pour certains gifs et pour certains appareils.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
travaillé!METTRE À JOUR:
Utilisez glisse:
usage:
voir les documents
la source
également mis (main / assets / htmls / name.gif) [avec ce html ajuster à la taille]
déclarer dans votre Xml par exemple comme ceci (main / res / layout / name.xml): [vous définissez la taille, par exemple]
dans votre activité, placez le code suivant dans onCreate
si vous voulez charger dynamiquement, vous devez charger la vue Web avec des données:
suggestion: est préférable de charger le gif avec des images statiques pour plus d'informations, consultez https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Voilà, j'espère que vous m'aiderez.
la source
J'ai résolu le problème en divisant les animations gif en images avant de l'enregistrer sur le téléphone, donc je n'aurais pas à le gérer dans Android.
Ensuite, je télécharge chaque image sur le téléphone, crée Drawable à partir de celui-ci, puis crée AnimationDrawable - très similaire à l'exemple de ma question
la source
j'ai trouvé un moyen très facile, avec un exemple de travail simple et agréable ici
afficher un widget animé
Avant de le faire fonctionner, il y a quelques chages à faire dans le code
DANS CE QUI SUIT
il suffit de remplacer
dans
ET EN
Fournissez votre propre fichier d'animation gif
REMPLACER LA PREMIÈRE LIGNE EN
selon le nom de la classe ...
après avoir fait ces petits changements ça devrait marcher quant à moi ...
j'espère que cette aide
la source
Façons de montrer un GIF animé sur Android:
https://github.com/koral--/android-gif-drawable - le décodeur est implémenté en C, il est donc très efficace.
https://code.google.com/p/giffiledecoder - le décodeur est implémenté en Java, il est donc plus facile de travailler avec. Toujours assez efficace, même avec des fichiers volumineux.
Vous trouverez également de nombreuses bibliothèques basées sur la classe GifDecoder. C'est également un décodeur basé sur Java, mais il fonctionne en chargeant le fichier entier en mémoire, il n'est donc applicable qu'aux petits fichiers.
la source
J'ai eu beaucoup de mal à avoir un gif animé fonctionnant sur Android. Je n'ai eu que deux travaux suivants:
WebView fonctionne correctement et très facilement, mais le problème est qu'il ralentit le chargement de la vue et que l'application ne répond plus pendant une seconde environ. Je n'ai pas aimé ça. J'ai donc essayé différentes approches (N'A PAS FONCTIONNÉ):
J'ai eu des allers-retours avec
Ion
; Enfin, je le fais fonctionner, et c'est vraiment rapide :-)la source
Glide 4.6
1. Pour charger gif
2. Pour obtenir l'objet fichier
la source
Glide
Bibliothèque de chargement d'images pour Android, recommandée par Google.
Ce que Glide a, mais pas Picasso
La possibilité de charger une animation GIF sur une simple ImageView pourrait être la caractéristique la plus intéressante de Glide. Et oui, vous ne pouvez pas faire ça avec Picasso. Quelques liens importants-
la source
Utilisez ImageViewEx , une bibliothèque qui rend l'utilisation d'un gif aussi simple que l'utilisation d'un
ImageView
.la source
Essayez ceci, fichier gif d'affichage du code ci-dessous dans la barre de progression
loading_activity.xml (dans le dossier Layout)
custom_loading.xml (dans le dossier dessinable)
ici je mets black_gif.gif (dans un dossier dessinable), vous pouvez mettre votre propre gif ici
LoadingActivity.java (dans le dossier res)
la source
Personne n'a mentionné la bibliothèque Ion ou Glide . ils fonctionnent très bien.
Il est plus facile à gérer par rapport à une WebView.
la source
J'ai eu du succès avec la solution proposée dans cet article , une classe appelée
GifMovieView
, qui rend unView
qui peut ensuite être affiché ou ajouté à un spécifiqueViewGroup
. Découvrez les autres méthodes présentées dans les parties 2 et 3 de l'article spécifié.Le seul inconvénient de cette méthode est que l'anticrénelage sur le film n'est pas si bon (cela doit être un effet secondaire de l'utilisation de la
Movie
classe Android "ombragée" ). Il est alors préférable de définir l'arrière-plan sur une couleur unie dans votre GIF animé.la source
Quelques réflexions sur l'exemple BitmapDecode ... Fondamentalement, il utilise la classe Movie ancienne, mais plutôt sans particularité , provenant d'android.graphics. Sur les versions d'API récentes, vous devez désactiver l'accélération matérielle, comme décrit ici . Sinon, c'était une faute pour moi.
Voici l'exemple BitmapDecode raccourci avec seulement la partie GIF. Vous devez créer votre propre Widget (Affichage) et le dessiner par vous-même. Pas aussi puissant qu'un ImageView.
2 autres méthodes, une avec ImageView et une autre avec WebView peuvent être trouvées dans ce fin tutoriel . La méthode ImageView utilise le android-gifview sous licence Apache de Google Code.
la source
@PointerNull a donné une bonne solution, mais ce n'est pas parfait. Il ne fonctionne pas sur certains appareils avec de gros fichiers et affiche une animation Gif buggée avec des images delta sur la version pré ICS. J'ai trouvé une solution sans ces bugs. C'est une bibliothèque avec un décodage natif vers drawable: android-gif-drawable de koral .
la source
Mettez-le dans une WebView, il doit pouvoir l'afficher correctement, car le navigateur par défaut prend en charge les fichiers gif. (Froyo +, si je ne me trompe pas)
la source
Il y a deux options pour charger des gifs animés dans nos applications Android
1) Utiliser Glide pour charger le gif dans un fichier
ImageView
.2) Utiliser un html pour charger le gif dans un
WebView
Créez le html avec l'adresse du fichier .gif:
stockez ce fichier dans le répertoire des ressources:
Chargez ce html dans la WebView de votre application:
Heres est un exemple complet de ces deux options .
la source
Uniquement pour l'API Android (Android Pie) 28 et +
utiliser AnimatedImageDrawable commeCode XML, ajoutez une ImageView
AnimatedImageDrawable
est un enfant de Drawable et créé parImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
qui nécessitait en outre l'instance deImageDecoder.Source
créé parImageDecoder.createSource
.ImageDecoder.createSource
peut uniquement prendre la source comme nom, ByteBuffer, File, resourceId, URI, ContentResolver pour créer un objet source et l'utilise pour créerAnimatedImageDrawable
commeDrawable
(appel polymorphe)Remarque: Vous pouvez également créer à l'
Bitmap
aide d' ImageDecoder # decodeBitmap .Production:
AnimatedDrawable prend également en charge le redimensionnement, la manipulation des cadres et des couleurs
la source
Je pense que la meilleure bibliothèque pour gérer les fichiers gif est celle-ci: par koral
Je l'ai utilisé et j'ai du succès et cette bibliothèque est dédiée aux GIF; mais où comme le picasso et le glissement sont un cadre d' image à usage général ; donc je pense que les développeurs de cette bibliothèque se sont entièrement concentrés sur les fichiers gif
la source
Utilisez la fresque. Voici comment procéder:
http://frescolib.org/docs/animations.html
Voici le repo avec l'échantillon:
https://github.com/facebook/fresco/tree/master/samples/animation
Attention, la fresque ne prend pas en charge le contenu enveloppé!
la source
Je voulais juste ajouter que la classe Movie est désormais obsolète.
Il est recommandé d'utiliser ce
AnimatedImageDrawable
la source
Créez un package nommé «Utils» sous le dossier src et créez une classe nommée «GifImageView»
Définissez maintenant GifImageView dans le fichier MainActivity: src / activity / MainActivity.class
Maintenant, le fichier de partie d'interface utilisateur: res / layout / activity_main.xml
Code de ressource: exemple Android
la source
Tout d'abord, le navigateur Android doit prendre en charge les GIF animés. Si ce n'est pas le cas, c'est un bug! Jetez un œil aux trackers de problèmes.
Si vous affichez ces GIF animés en dehors d'un navigateur, cela pourrait être une autre histoire. Pour faire ce que vous demandez, il faudrait une bibliothèque externe qui prend en charge le décodage des GIF animés.
Le premier port d'escale serait d'examiner l'API Java2D ou JAI (Java Advanced Imaging), bien que je serais très surpris si Android Dalvik prendrait en charge ces bibliothèques dans votre application.
la source
Similaire à ce que @Leonti a dit, mais avec un peu plus de profondeur:
Ce que j'ai fait pour résoudre le même problème a été d'ouvrir GIMP, de masquer tous les calques sauf un, de l'exporter en tant que sa propre image, puis de masquer ce calque et d'afficher le suivant, etc., jusqu'à ce que j'aie des fichiers de ressources individuels pour chacun . Ensuite, je pourrais les utiliser comme images dans le fichier XML AnimationDrawable.
la source
J'ai résolu cela en divisant le gif en cadres et en utilisant une animation Android standard
la source
Quelque chose que j'ai fait pour afficher des gifs dans les applications. J'ai étendu ImageView pour que les gens puissent utiliser ses attributs librement. Il peut afficher des gifs depuis l'URL ou depuis le répertoire des ressources. La bibliothèque facilite également l'extension des classes pour en hériter et l'étendre pour prendre en charge différentes méthodes pour initialiser le gif.
https://github.com/Gavras/GIFView
Il y a un petit guide sur la page github.
Il a également été publié sur Android Arsenal:
https://android-arsenal.com/details/1/4947
Exemple d'utilisation:
De XML:
Dans l'activité:
Définition du gif par programme:
la source
Manière la plus simple - Peut être considéré comme le code ci-dessous
Nous pouvons profiter d'Imageview setImageResource, reportez-vous au code ci-dessous pour la même chose.
Le code ci-dessous peut être utilisé pour afficher l'image comme gif incase si vous avez l'image divisée multiple de gif. Il suffit de diviser le gif en png individuel à partir d'un outil en ligne et de mettre l'image dans le dessin comme l'ordre ci-dessous
image_1.png, image_2.png, etc.
Demandez au gestionnaire de modifier l'image dynamiquement.
la source
La manière simple d'afficher le GIF animé directement à partir de l'URL dans la disposition de votre application consiste à utiliser la classe WebView.
Étape 1: dans votre mise en page XML
Étape 2: Dans votre activité
Étape 3: Dans votre Manifest.XML, autorisez Internet
Étape 4: Si vous souhaitez rendre votre arrière-plan GIF transparent et adapter GIF à votre mise en page
la source
Vous pouvez utiliser la bibliothèque GifAnimationDrawable trouvée dans ce lien - https://github.com/Hipmob/gifanimateddrawable , et qui convertit n'importe quel gif en AnimationDrawable. Prendre plaisir :)
la source
la source