【发布时间】:2018-11-12 18:33:10
【问题描述】:
旁注 - 虽然我的一些示例使用 Kotlin,但 Java 或 Kotlin 中的答案很有帮助。
我正在使用Commit Content API 创建一个 GIF 键盘。为此,我需要能够创建 .gif 文件。
我正在使用 Glide 从互联网上获取图像并将它们显示在 recyclerview 内的列表中。
对于 Glide 下载的每个图像,我必须使用该图像的数据创建一个 File 对象。
我看到了两种可以实现这一目标的方法。
1] 像这样创建一个覆盖onResourceReady 的侦听器。这种方法的问题是我不知道如何将 GifDrawable 转换为 .gif 文件,因为所有 Stack Overflow 帖子都在讨论如何将 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 或类似的位置。来自Glide - download and resize GIF into a file 帖子的示例 Java 代码可能如下所示。这段代码的问题在于
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();
有人可以帮助我改进这两种方法中的任何一种,或者提出一种使用 Glide 将 GIF 转换为文件的新方法吗?
【问题讨论】:
标签: java android kotlin gif android-glide