Glide播放gif 如何获取最后一帧
- Dominant language
- Java
- Stars
- 35k
- Forks
- 6.2k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 8
Description
Glide.with(this@ChatDetailsActivity)
.asGif()
.load(bean.content)
.addListener(object : RequestListener {
override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target?, isFirstResource: Boolean): Boolean {
e?.printStackTrace()
return true
}
override fun onResourceReady(resource: GifDrawable, model: Any?, target: com.bumptech.glide.request.target.Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
try {
val gifStateField: Field = GifDrawable::class.java.getDeclaredField("state")
gifStateField.setAccessible(true)
val gifStateClass =
Class.forName("com.bumptech.glide.load.resource.gif.GifDrawable\$GifState")
val gifFrameLoaderField: Field =
gifStateClass.getDeclaredField("frameLoader")
gifFrameLoaderField.setAccessible(true)
val gifFrameLoaderClass =
Class.forName("com.bumptech.glide.load.resource.gif.GifFrameLoader")
val gifDecoderField: Field =
gifFrameLoaderClass.getDeclaredField("gifDecoder")
gifDecoderField.setAccessible(true)
val gifDecoderClass =
Class.forName("com.bumptech.glide.gifdecoder.GifDecoder")
val gifDecoder: Any =
gifDecoderField.get(gifFrameLoaderField.get(gifStateField.get(resource)))
val getDelayMethod = gifDecoderClass.getDeclaredMethod(
"getDelay",
Int::class.javaPrimitiveType
)
getDelayMethod.isAccessible = true
resource.setLoopCount(1)
//获得总帧数
val count = resource.frameCount
bean.gift_play_status = 1
bean.bitmap = resource.firstFrame
} catch (e: NoSuchFieldException) {
e.printStackTrace();
} catch (e: ClassNotFoundException) {
e.printStackTrace();
} catch (e: IllegalAccessException) {
e.printStackTrace();
} catch (e: NoSuchMethodException) {
e.printStackTrace();
} catch (e: InvocationTargetException) {
e.printStackTrace();
}
return false
}
})
.into(activity_chats_details_rcv_chat_item_content_tv_item4_iv)
Contributor guide
Assessment
This issue has not been assessed yet.