在 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)}