Sidenote - хотя некоторые из моих примеров приведены на Kotlin, ответы на Java или Kotlin полезны.
Я создаю GIF-клавиатуру с использованием Commit Content API .Для этого мне нужно иметь возможность создавать .gif
файлов.
Я использую Glide для получения изображений из Интернета и отображения их в списке внутри recyclerview
.
Для каждого изображения, загружаемого Glide, мне нужно создать объект File
с данными этого изображения.
Я вижу два метода, которые могут выполнить эту задачу.
1] Создатьслушатель, который переопределяет onResourceReady
вот так.Проблема с этим методом заключается в том, что я не знаю, как преобразовать GifDrawable
в .gif
файл, потому что все сообщения о переполнении стека говорят о том, как преобразовать Drawable
в файл:
Glide.with(context)
.asGif()
.load(items[position])
.listener(object : RequestListener<GifDrawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<GifDrawable>?, isFirstResource: Boolean): Boolean {
Log.d("VED-APP","Glide Load Failed")
return false
}
override fun onResourceReady(resource: GifDrawable?, model: Any?, target: Target<GifDrawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
//I need code to convert the GifDrawable to a File
return false
}
})
.into(holder.imageView)
2] Загрузите изображение в ByteArray
или что-то подобное.Пример кода Java, взятый из поста Glide - скачайте и измените размер GIF в файл , может выглядеть так.Проблема с этим кодом состоит в том, что
A] .into(width,height)
устарело
B] нет .toBytes
метода
C] Я не хочу указыватьразмеры моего GIF - я просто хотел бы использовать оригинальный размер.(Или, по крайней мере, я хотел бы сохранить соотношение сторон)
byte[] bytes = Glide.with(context)
.load(items[position])
.asGif()
.toBytes()
.into(250, 250)
.get();
file = new File(fileName);
FileOutputStream fileWriter = new FileOutputStream(file);
fileWriter.write(bytes);
fileWriter.flush();
fileWriter.close();
Может кто-нибудь помочь мне улучшить любой из этих двух методов или предложить новый способ преобразования GIF в файлс Glide?