Affichage GIF Animé
Je veux afficher des images en GIF animé dans mon application.
Comme je l'ai appris à la dure Android ne supporte pas les GIF animés en mode natif.
Cependant, il peut afficher des animations à l'aide de AnimationDrawable:
Développer > Guides > Images & Graphiques > un drawable Aperçu
L'exemple utilise l'animation enregistré en tant que cadres dans les ressources de l'application, mais ce dont j'ai besoin est d'afficher gif animé directement.
Mon plan est de briser les GIF animés à des images et ajouter chaque image comme dessinés à AnimationDrawable.
Personne ne sait comment extraire les images de GIF animés et de les convertir dans Drawable?
- Voulez-vous dire au sein d'android , ou d'extraire les images d'un gif avec un outil externe?
- il est certainement un bug, voir IssueTracker pour plus d'informations.
- Juste pour tous ceux qui sont venus ici par la recherche d'une application qui peut afficher des GIFs animés: quickPic
- stackoverflow.com/questions/30338258/...
- L'utilisation de la fresque pour afficher GIF github.com/facebook/fresco je pense que c'est une solution simple.
- Je cherchais cette question et a trouvé une solution: jouer GIF à l'intérieur d'une application android
Vous devez vous connecter pour publier un commentaire.
Android réellement capable de décoder et d'afficher des GIFs animés, à l'aide d'android.les graphiques.Film classe.
Ce n'est pas trop documenté, mais il est dans Référence du kit de développement. En outre, il est utilisé dans Les échantillons dans ApiDemos dans BitmapDecode exemple avec un drapeau animé.
setLayerType(LAYER_TYPE_SOFTWARE)
sur votre point de Vue. Mais encore, elle ne fonctionne que pour certains gifs et pour certains appareils.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
travaillé!Mise à JOUR:
Utiliser glide:
utilisation:
voir docs
également mis en main/assets/htmls/name.gif) [avec ce code html de s'ajuster à la taille de l']
déclarer dans votre Xml, par exemple comme ceci (main/res/layout/name.xml): [vous de définir la taille, par exemple]
dans votre Activité mis le code suivant à l'intérieur de onCreate
si vous voulez charger dynamiquement, vous devez charger la webview avec les données:
suggestion: est-ce mieux de charge gif avec des images statiques pour plus d'informations, consultez https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Ça y est, je l'espère, vous aider.
J'ai résolu le problème en divisant gif animations en images avant de les enregistrer sur le téléphone, donc je ne voudrais pas avoir à traiter avec dans Android.
Puis-je télécharger toutes les images sur le téléphone, créer Drawable, puis créer AnimationDrawable - très similaire à l'exemple de ma question
j'ai trouvé un moyen très facile, avec une belle et simple exemple ici
affichage animé widget
Avant de la faire fonctionner il y a quelques changements à faire dans le code
DANS LA SUITE DE
il suffit de remplacer
dans
ET DANS
Fournir votre propre animation gif fichier
REMPLACER LA PREMIÈRE LIGNE DANS
selon le nom de la classe...
après avoir fait ce que peu de modifications, il doit travailler comme pour moi...
espérons que cette aide
Façons de montrer GIF animé sur Android:
https://github.com/koral--/android-gif-drawable - décodeur est mis en œuvre en C, il est donc très efficace.
https://code.google.com/p/giffiledecoder - décodeur est mis en œuvre en Java, il est donc plus facile de travailler avec. Encore assez efficace, même avec de gros fichiers.
Vous trouverez également de nombreuses bibliothèques basées sur GifDecoder classe. C'est également basé sur Java décodeur, mais il fonctionne en chargeant le fichier entier dans la mémoire, il est seulement applicable pour les petits fichiers.
J'ai eu un moment difficile d'avoir des gif animés de travail sur Android. Je n'ai eu qu'à la suite de deux de travail:
WebView fonctionne bien et vraiment facile, mais le problème est qu'il rend la vue des charges plus lent et l'application serait de ne pas répondre pendant une seconde ou deux. Je n'ai pas comme ça. J'ai donc essayé différentes approches (ne fonctionne PAS):
J'ai eu quelques allers et retours avec
Ion
; Enfin, je l'ai à travailler, et il est vraiment très rapide 🙂Glide
Chargeur d'Image de la Bibliothèque pour Android, recommandé par Google.
Ce qui Glissent a mais Picasso n'a pas
Une capacité de charge de GIF Animation d'un simple ImageView peut-être la caractéristique la plus intéressante de la Glisse. Et oui, vous ne pouvez pas faire cela avec Picasso.
Certains liens importants-
Utilisation ImageViewEx, une bibliothèque qui rend l'utilisation d'un gif aussi facile que d'utiliser un
ImageView
.Essayer cela, le soufflet affichage du code d'un fichier gif dans progressbar
loading_activity.xml(dans la Mise en page du dossier)
custom_loading.xml(dans le dossier drawable)
ici j'ai mis black_gif.gif(dans le dossier drawable), vous pouvez mettre vos propres gif ici
LoadingActivity.java(dans le dossier res)
Personne n'a mentionné le Ion ou Glisse de la bibliothèque. ils fonctionnent très bien.
Il est plus facile à manipuler par rapport à une WebView.
J'ai eu du succès avec la solution proposée dans cet article, une classe appelée
GifMovieView
, ce qui rend uneView
qui peuvent ensuite être affichées ou ajouté à unViewGroup
. Découvrez les autres méthodes présentées dans les parties 2 et 3 de l'article indiqué.Le seul inconvénient de cette méthode est que l'antialiasing sur le film n'est pas très bon (doit être un effet secondaire de l'utilisation de la "shady" Android
Movie
Classe). Vous êtes alors mieux définir l'arrière-plan avec une couleur unie au sein de votre GIF animé.Quelques réflexions sur le BitmapDecode exemple... en gros il utilise l'ancienne, mais plutôt sans Film classe à partir d'android.les graphiques.
Sur les dernières versions de l'API, vous devez désactiver l'accélération matérielle, comme décrit ici. Il a été segfaulting pour moi sinon.
Ici est la BitmapDecode exemple raccourcie avec seulement le GIF de la partie. Vous avez à faire votre propre Widget (point de Vue) et de le faire par vous-même. Pas tout à fait aussi puissant qu'une ImageView.
2 autres méthodes, l'une avec ImageView un autre avec WebView peut être trouvé dans ce beau tutoriel. L'ImageView méthode utilise Apache licence android-gifview de Google Code.
@PointerNull a donné une bonne solution, mais il n'est pas parfait. Il ne fonctionne pas sur certains appareils avec de gros fichiers et de montrer buggy animation Gif avec delta images sur la pré ICS version.
J'ai trouvé la solution sans ce bug. C'est la bibliothèque native de décodage à drawable: koral android-gif-drawable.
Glide 4.6
1. Pour Charger gif
2. Pour obtenir le fichier objet
Mettre dans une WebView, il doit être en mesure de l'afficher correctement, puisque le navigateur par défaut prend en charge les fichiers gif. (Froyo+, si je ne me trompe pas)
Il y a deux options pour charger des gifs animés dans nos applications Android
1)à l'Aide de Glisse pour charger le gif dans un
ImageView
.2) à l'Aide d'un code html à charger le gif dans un
WebView
Créer le code html à l'adresse de l' .fichier gif:
de stocker ce fichier dans le répertoire actif:
La charge de ce code html dans la WebView de votre demande:
Heres est un exemple complet de ces deux options.
Pour seulement API android (Android Tarte)28 et +
utilisation AnimatedImageDrawable comme
Code XML, ajouter une ImageView
AnimatedImageDrawable
est un enfant de Dessinés et créés parImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
, qui a en outre requis l'instance deImageDecoder.Source
créé parImageDecoder.createSource
.ImageDecoder.createSource
ne peut prendre source comme un nom, ByteBuffer, Fichier, resourceId, URI, ContentResolver pour créer la source de l'objet et l'utilise pour créerAnimatedImageDrawable
commeDrawable
(polymorphes appel)Remarque: Vous pouvez également créer
Bitmap
à l'aide de ImageDecoder#decodeBitmap.De sortie:
AnimatedDrawable prend également en charge le redimensionnement, le cadre et la manipulation de couleurs
Je pense que le mieux bibliothèque pour gérer les fichiers gif est celui-ci: par koral
L'utilise et je suis de succès et de cette bibliothèque est dédié à GIF; mais où, comme le picasso et de la glisse sont usage général image cadre; donc, je pense que les développeurs de cette bibliothèque ont entièrement concentrée sur des fichiers gif
Utilisation de la fresque. Voici comment le faire:
http://frescolib.org/docs/animations.html
Voici le repo avec l'échantillon:
https://github.com/facebook/fresco/tree/master/samples/animation
Méfiez-vous de la fresque ne prend pas en charge l'envelopper le contenu!
Tout d'abord le navigateur Android devrait soutenir les GIFs Animés. Si elle n'est pas le cas, alors c'est un bug! Jetez un oeil à la question de trackers.
Si vous êtes à l'affichage de ces GIFs animés en dehors d'un navigateur, il pourrait être une autre histoire. À faire ce que vous demandez nécessiterait une bibliothèque externe qui prend en charge le décodage des GIFs Animés.
Le premier port de l'appel serait de regarder Java2D ou JAI (Java Advanced Imaging) de l'API, même si je serais très surpris si Android Dalvik serait en charge de ces bibliothèques dans votre Application.
Similaire à ce que @Leonti 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, masquer tous les calques sauf un, l'exporter en tant que sa propre image, puis masquer ce calque et afficher la suivante, etc., jusqu'à ce que j'avais individuels des fichiers de ressources pour chacun. Ensuite, j'ai pu les utiliser en tant que cadres dans le AnimationDrawable fichier XML.
J'ai résolu ce problème en crève gif en images et l'utilisation d'android standard animation
Quelque chose que j'ai fait pour montrer gifs dans les applications. J'ai étendu ImageView afin que les gens peuvent utiliser ses attributs librement. Il peut afficher des gifs à partir de l'url ou du répertoire actif.
La bibliothèque rend aussi facile pour l'extension de classes héritent de celui-ci et de 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:
À partir de XML:
Dans l'activité:
Réglage de la gif du programme:
Facile - Peut être envisager le code ci-dessous
Nous pouvons profiter de Imageview setImageResource , reportez-vous ci-dessous de code pour la même chose.
Le code ci-dessous peut être utilisé pour afficher l'image comme gif encas si vous avez les multiples split image de gif. Juste diviser le gif en png à partir d'un outil en ligne et de mettre l'image dans le drawable comme ci-dessous afin
image_1.png, image_2.png, etc.
Ont le gestionnaire de changer l'image dynamiquement.
Le moyen facile d'afficher GIF animé directement à partir de l'URL à la disposition de votre application est à utiliser WebView classe.
L'étape 1:
Dans votre mise en page XML
HTML:
Étape 2: Dans votre Activité
JS:
Étape 3: Dans votre Manifest.XML faire d'Internet une autorisation
HTML:
Étape 4: Dans le cas où vous voulez faire de votre GIF fond transparent et de faire des GIF s'adapter à votre Disposition
JS:
Voulais juste ajouter que la Film classe est maintenant obsolète.
Il est recommandé d'utiliser cette
AnimatedImageDrawable
Vous pouvez utiliser GifAnimationDrawable bibliothèque trouvé dans ce lien - https://github.com/Hipmob/gifanimateddrawable, et qui convertir n'importe quel gif AnimationDrawable. Enjoy 🙂