Я хочу отображать анимированные GIF-изображения в моем приложении. Как я выяснил, сложный способ, которым Android не поддерживает анимированный GIF изначально.
Однако он может отображать анимацию, используя AnimationDrawable :
Разработка> Руководства> Изображения и графика> Обзор Drawables
В примере используется анимация, сохраненная в виде кадров в ресурсах приложения, но мне нужно отобразить анимированный GIF-файл напрямую.
Мой план состоит в том, чтобы разбить анимированный GIF на кадры и добавить каждый кадр как нарисованный в AnimationDrawable.
Кто-нибудь знает, как извлечь кадры из анимированного GIF и преобразовать каждый из них в Drawable ?
java
android
animated-gif
Леонтий
источник
источник
Ответы:
Android фактически может декодировать и отображать анимированные GIF-файлы, используя класс android.graphics.Movie.
Это не слишком задокументировано, но есть в SDK Reference . Кроме того, он используется в примерах в ApiDemos в примере BitmapDecode с некоторым анимированным флагом.
источник
setLayerType(LAYER_TYPE_SOFTWARE)
на вашем View. Но это все еще работает только для некоторых картинок и некоторых устройств.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
работал!ОБНОВИТЬ:
Используйте скольжение:
использование:
см документы
источник
также поместите (main / assets / htmls / name.gif) [с помощью этого html-файла подгоните к размеру]
объявите в своем XML, например, так (main / res / layout / name.xml): [вы определяете размер, например]
в вашей деятельности поместите следующий код внутри onCreate
если вы хотите загружать динамически, вы должны загрузить веб-представление с данными:
предложение: лучше загрузить GIF со статическими изображениями для получения дополнительной информации проверьте https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Вот и все, я надеюсь, вы поможете.
источник
Я решил проблему, разделив gif- анимацию на кадры перед сохранением в телефоне, поэтому мне не пришлось бы иметь дело с этим в Android.
Затем я загружаю каждый кадр в телефон, создаю из него Drawable, а затем создаю AnimationDrawable - очень похоже на пример из моего вопроса.
источник
я нашел очень простой способ, с хорошим и простым рабочим примером здесь
отображать анимированный виджет
Прежде чем заставить его работать, в коде необходимо выполнить некоторые действия.
В СЛЕДУЮЩИХ
просто замени
в
И В
Предоставьте свой собственный файл анимации GIF
ЗАМЕНА ПЕРВОЙ ЛИНИИ В
по названию класса ...
после внесения этих небольших изменений все должно работать как у меня ...
надеюсь, это поможет
источник
Способы показать анимированный GIF на Android:
https://github.com/koral--/android-gif-drawable - декодер реализован на C, поэтому он очень эффективен.
https://code.google.com/p/giffiledecoder - декодер реализован на Java, поэтому с ним проще работать. Все еще достаточно эффективно, даже с большими файлами.
Вы также найдете много библиотек, основанных на классе GifDecoder. Это также Java-декодер, но он работает, загружая весь файл в память, поэтому он применим только к маленьким файлам.
источник
Мне было очень тяжело работать с анимацией в Android. У меня были только следующие две работы:
WebView работает нормально и действительно легко, но проблема в том, что он замедляет загрузку, и приложение не отвечает на секунду или около того. Мне это не понравилось. Поэтому я пробовал разные подходы (НЕ РАБОТАЛ):
У меня были некоторые взад и вперед
Ion
; Наконец, у меня это работает, и это действительно быстро :-)источник
Glide 4.6
1. Загрузить gif
2. Получить файл объекта
источник
Glide
Библиотека загрузчиков изображений для Android, рекомендованная Google.
Что есть у Glide, но у Пикассо нет
Возможность загрузки GIF-анимации в простой ImageView может быть самой интересной особенностью Glide. И да, вы не можете сделать это с Пикассо. Некоторые важные ссылки
источник
Используйте ImageViewEx , библиотеку, которая делает использование GIF столь же простым, как использование
ImageView
.источник
Попробуйте это, приведенный ниже код отображения GIF-файла в ProgressBar
loading_activity.xml (в папке Layout)
custom_loading.xml (в папке для рисования)
здесь я положил black_gif.gif (в папке drawable), вы можете поместить свой собственный GIF здесь
LoadingActivity.java (в папке res)
источник
Никто не упомянул библиотеку Ion или Glide . они работают очень хорошо.
Это проще в обращении по сравнению с WebView.
источник
У меня был успех с решением, предложенным в этой статье , классом
GifMovieView
, который отображает,View
который затем может быть отображен или добавлен к конкретномуViewGroup
. Ознакомьтесь с другими методами, представленными в частях 2 и 3 указанной статьи.Единственный недостаток этого метода заключается в том, что сглаживание в фильме не так уж хорошо (должно быть побочным эффектом использования «теневого»
Movie
класса Android ). Тогда вам лучше установить сплошной цвет фона в анимированном GIF.источник
Некоторые мысли по поводу примера BitmapDecode ... В основном он использует древний, но довольно безликий класс Movie из android.graphics. В последних версиях API вам необходимо отключить аппаратное ускорение, как описано здесь . В противном случае это было для меня
Вот пример BitmapDecode, сокращенный только с частью GIF. Вы должны сделать свой собственный виджет (вид) и нарисовать его самостоятельно. Не так мощно, как ImageView.
2 других метода, один с ImageView, другой с WebView, можно найти в этом прекрасном руководстве . Метод ImageView использует лицензированный Apache android-gifview из Google Code.
источник
@PointerNull дал хорошее решение, но оно не идеально. Он не работает на некоторых устройствах с большими файлами и показывает некорректную анимацию Gif с дельта-кадрами в предварительной версии ICS. Я нашел решение без этих ошибок. Это библиотека с собственным декодированием для рисования : koral's android-gif-drawable .
источник
Поместите его в WebView, он должен отображать его правильно, поскольку браузер по умолчанию поддерживает файлы GIF. (Froyo +, если я не ошибаюсь)
источник
Существует два варианта загрузки анимированных GIF-файлов в наши приложения для Android
1) Использование Glide для загрузки GIF в
ImageView
.2) Использование HTML для загрузки GIF в
WebView
Создайте HTML с адресом .gif файла:
сохраните этот файл в каталоге активов:
Загрузите этот HTML-код в WebView вашего приложения:
Вот полный пример этих двух вариантов .
источник
Только для Android API (Android Pie) 28 и +
использовать AnimatedImageDrawable какXML-код, добавьте ImageView
AnimatedImageDrawable
является дочерью Drawable и созданImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
что дополнительно требует экземплярImageDecoder.Source
созданImageDecoder.createSource
.ImageDecoder.createSource
может принимать источник только как имя, ByteBuffer, File, resourceId, URI, ContentResolver для создания исходного объекта и использует его для созданияAnimatedImageDrawable
какDrawable
(полиморфный вызов)Примечание: вы также можете создать
Bitmap
с помощью ImageDecoder # decodeBitmap .Вывод:
AnimatedDrawable также поддерживает изменение размера, рамку и управление цветом
источник
Я думаю, что лучшая библиотека для обработки GIF-файлов : koral
Использовал его, и я успешен, и эта библиотека посвящена GIF'S; но где как Пикассо и скольжение являются основой изображения общего назначения ; так что я думаю, что разработчики этой библиотеки полностью сосредоточились на gif-файлах
источник
Используйте фреску. Вот как это сделать:
http://frescolib.org/docs/animations.html
Вот репо с образцом:
https://github.com/facebook/fresco/tree/master/samples/animation
Осторожно, фреска не поддерживает перенос содержимого!
источник
Просто хотел добавить, что класс Movie теперь устарел.
Рекомендуется использовать это
AnimatedImageDrawable
источник
Создайте пакет с именем «Utils» в папке src и создайте класс с именем «GifImageView»
Теперь определите GifImageView в файле MainActivity: src / activity / MainActivity.class
Теперь UI Part File: res / layout / activity_main.xml
Код ресурса: пример Android
источник
Прежде всего, браузер Android должен поддерживать анимированные GIF-файлы. Если это не так, то это ошибка! Посмотрите на проблемы трекеров.
Если вы отображаете эти анимированные GIF-изображения вне браузера, это может быть другой историей. Чтобы сделать то, что вы просите, потребуется внешняя библиотека, которая поддерживает декодирование анимированных GIF-файлов.
Первым портом вызова было бы посмотреть на API Java2D или JAI (Java Advanced Imaging), хотя я был бы очень удивлен, если бы Android Dalvik поддерживал эти библиотеки в вашем приложении.
источник
Подобно тому, что сказал @Leonti, но с большей глубиной:
Чтобы решить ту же проблему, я открыл GIMP, скрыл все слои, кроме одного, экспортировал его как свое собственное изображение, а затем скрыл этот слой и отобразил следующий, и т. Д., Пока у меня не было отдельных файлов ресурсов для каждого из них. , Затем я мог бы использовать их в качестве фреймов в XML-файле AnimationDrawable.
источник
Я решил это, разделив GIF по кадрам и использовать стандартную анимацию Android
источник
Что-то, что я сделал для показа картинок в приложениях. Я расширил ImageView, чтобы люди могли свободно использовать его атрибуты. Он может отображать картинки из URL или из каталога активов. Библиотека также позволяет расширяемым классам наследовать от нее и расширять ее для поддержки различных методов инициализации gif.
https://github.com/Gavras/GIFView
На странице github есть небольшое руководство.
Также было опубликовано на Android Arsenal:
https://android-arsenal.com/details/1/4947
Пример использования:
Из XML:
В деятельности:
Установка gif программно:
источник
Самый простой способ - можно рассмотреть приведенный ниже код
Мы можем воспользоваться Imageview setImageResource, см. Ниже код для того же.
Приведенный ниже код может быть использован для показа изображения в формате GIF, если у вас есть несколько изображений GIF. Просто разделите GIF-файл на отдельный PNG-файл из онлайн-инструмента и поместите изображение в рисунок, как показано ниже
image_1.png, image_2.png и т. д.
Есть обработчик для динамического изменения изображения.
источник
Простой способ отобразить анимированный GIF непосредственно из URL в макет вашего приложения - использовать класс WebView.
Шаг 1: в вашем макете XML
Шаг 2: в вашей деятельности
Шаг 3: В вашем Manifest.XML сделайте интернет-разрешение
Шаг 4. Если вы хотите, чтобы ваш GIF-фон был прозрачным и чтобы GIF-файл соответствовал вашему макету
источник
Вы можете использовать библиотеку GifAnimationDrawable, которая находится по этой ссылке - https://github.com/Hipmob/gifanimateddrawable , и которая преобразует любой gif в AnimationDrawable. Наслаждаться :)
источник
источник