Работа с Gif-файлами в проекте Android

С бэка получаем зашированную строку Base64 (до кодирования это gif картинка), которую нужно декодировать и сохранить в кэш приложения (кэшируется с помощью Glide). Позже требуется взять этот файл из кэша (файл хранится в кэше без расширения) в Gif-расширении и показать пользователю.

Проблема в том, что взятый с кэша представляется пользователю в виде обычной картинки(только первый фрейм), а не в Gif.

Как отображать пользователю именно Gif-картинку в описанных условиях?


Ответы (1 шт):

Автор решения: Vadik

Библиотека Glide поддерживает формат GIF.

Допустим, у нас есть ImageView:

<ImageView
    android:id="@+id/my_image_view"
    android:layout_width="100dp"
    android:layout_height="100dp" />

Загружаем GIF из ресурсов в эту ImageView и все начинает анимироваться:

Glide.with(this)
    .load(R.drawable.my_gif_image)
    .into(myImageView)

Если вам нужно управлять количеством циклов GIF-анимации, то можно создать такой класс:

class GifViewTarget(
    private val imageView: ImageView,
    private val loopCount: Int
) : ImageViewTarget<Drawable>(imageView) {
    override fun setResource(resource: Drawable?) {
        if (resource is GifDrawable) {
            resource.setLoopCount(loopCount)
        }
        imageView.setImageDrawable(resource)
    }
}

Тогда GIF можно загрузить так:

Glide.with(this)
    .load(R.drawable.my_gif_image)
    .into(GifViewTarget(myImageView, loopCount = 3))
→ Ссылка