bumptech / bumptech/glide

Glide播放gif 如何获取最后一帧

Open
#4,401 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.