Android中Base64转GifImageView仅显示首帧?问题排查与实现
Base64转GIF仅显示第一帧的问题解决
你的问题出在**BitmapFactory.decodeByteArray()只能解码GIF的第一帧**——Bitmap是静态图像载体,不支持GIF的多帧动画逻辑,所以只会显示单帧静态图。
Android完全可以实现Base64转GIF并播放完整动画,下面给你两种可行方案:
方案一:用Glide加载(推荐)
Glide是Android常用的图片加载库,支持自动识别并播放GIF动画,只需把解码后的字节数组传给Glide即可:
val decodedString: ByteArray = Base64.getDecoder().decode(base64gif) Glide.with(this) .asGif() // 指定加载为GIF格式 .load(decodedString) .into(mExerciseGif)
注:这里mExerciseGif用普通ImageView就行,Glide会自动处理动画播放逻辑。
方案二:自定义解析GIF帧(无第三方库)
如果不想依赖第三方库,需要手动解析GIF的所有帧并实现播放:
- 将解码后的字节数组转为
ByteArrayInputStream - 使用GIF解析工具(需自行实现或引入轻量解析类)提取所有帧的Bitmap和每帧的延迟时间
- 创建
AnimationDrawable,依次添加所有帧并设置对应延迟 - 给
ImageView设置AnimationDrawable并调用start()启动播放
这种方式代码量较大,适合对依赖有严格限制的场景。
内容的提问来源于stack exchange,提问作者jpsf
相关产品推荐
相关产品推荐

