当前位置: 首页 > news >正文

Android 中实现 GIF 图片动画

在 Android 中,ImageView 从 Android 9.0(API 级别 28) 开始原生支持 GIF 动画,通过 AnimatedImageDrawable 类实现。在之前的版本中,ImageView 并不支持直接播放 GIF 动画,只能显示 GIF 的第一帧。

一、 Android 9.0(API 级别 28)及以上版本

在 Android 9.0(API 级别 28)及以上版本中使用 ImageView 实现播放 GIF 动画。

	private lateinit var animateDrawable: AnimatedImageDrawable@SuppressLint("UseCompatLoadingForDrawables")@RequiresApi(Build.VERSION_CODES.P)fun startAnimate() {// 加载动画图片animateDrawable = resources.getDrawable(R.drawable.animate_icon, null) as AnimatedImageDrawable_binding.imageAnimate.setImageDrawable(animateDrawable)// 开启动画animateDrawable.start()}@RequiresApi(Build.VERSION_CODES.P)fun stopAnimate() {animateDrawable.stop()}

在布局文件中,只需使用普通的 ImageView 并设置 src 属性即可。

	<ImageViewandroid:id="@+id/image_animate"android:layout_width="100dp"android:layout_height="100dp"android:src="@drawable/animate_icon"/>

二、在 Android 9.0 之前的版本中播放 GIF 动画

在 Android 9.0 之前的版本中,可以使用第三方库(如 Glide 或 Picasso)实现 GIF 图片动画。

1、第三方 Glide 库(推荐)

通过使用 Glide 第三方库,你可以轻松地实现复杂的 GIF 动画效果,无需额外编写代码。

(1)添加依赖库

    implementation("com.github.bumptech.glide:glide:4.16.0")annotationProcessor("com.github.bumptech.glide:compiler:4.16.0")

(2) 代码中调用

	fun startAnimateByGlide() {Glide.with(context).asGif().load(R.drawable.animate_icon).into(_binding.imageAnimate)}

2、第三方 Picasso 库 (不支持)

Picasso 本身并不支持 GIF 动画的自动播放,只能加载 GIF 文件并显示其第一帧。这是因为 Picasso 主要专注于静态图片的加载和缓存,对于 GIF 动画的支持较为有限。如果你需要自动播放 GIF 动画,建议使用 Glide。

    fun startAnimateByPicasso() {Picasso.get().load(R.drawable.animate_icon).into(_binding.imageAnimate)}

相关文章:

  • DeepSeek R1模型微调怎么做?从入门到实战
  • CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析
  • 经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)
  • 从C语言变量看内存
  • LX3-初识是单片机
  • java集合框架day1————集合体系介绍
  • mongodb 存储数据的具体实现方式
  • 基于SpringBoot的篮球联盟管理系统(源码+数据库+万字文档)
  • 如何开发一套TRS交易系统:架构设计、核心功能与风险控制
  • 第十三讲、isaaclab中修改工作流的RL环境
  • CCF CSP 第37次(2025.03)(1_数值积分_C++)
  • Java 程序员的 Python 之旅
  • 【线段树】P1253 扶苏的问题|普及+
  • 操作系统期中复习
  • 初识Redis · C++客户端list和hash
  • 第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解
  • 【PyQt5】@QtCore.pyqtSlot()的作用
  • oracle不同数据库版本的自增序列
  • element-ui中的上传组件el-upload非自动上传监听不到success
  • go for 闭环问题【踩坑记录】
  • 69岁朱自强被查,曾任南京地铁总经理
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 专访|首夺天元头衔创生涯历史,王星昊打算一步一步慢慢来
  • 俄罗斯延长非法滞留外国人限期离境时间至9月
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼
  • 国家发改委答澎湃:力争6月底前下达2025年两重建设和中央预算内投资全部项目清单