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 属性即可。

复制代码
	<ImageView
        android: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)
    }
相关推荐
茄子凉心17 分钟前
android 开机启动App
android·java·开发语言
2501_937193142 小时前
神马影视 8.8 版源码:4K 播放优化体验测评
android·源码·源代码管理·机顶盒
修炼者4 小时前
Kotlin中的Flow流
android·kotlin
洞见不一样的自己4 小时前
Android studio 编译问题
android
j***63084 小时前
SpringbootActuator未授权访问漏洞
android·前端·后端
YJlio4 小时前
进程和诊断工具学习笔记(8.29):ListDLLs——一眼看清进程里加载了哪些 DLL,谁在偷偷注入
android·笔记·学习
你的乔克叔叔5 小时前
四大组件-Activity
android
aqi005 小时前
FFmpeg开发笔记(九十二)基于Kotlin的开源Android推流器StreamPack
android·ffmpeg·kotlin·音视频·直播·流媒体
Aileen_0v07 小时前
【Gemini3.0的国内use教程】
android·人工智能·算法·开源·mariadb
浩浩的代码花园8 小时前
自研端侧推理模型实测效果展示
android·深度学习·计算机视觉·端智能