Glideでapngを扱うには

2022/01/21に公開

結論: このライブラリを使う。
https://github.com/penfeizhou/APNG4Android

自前で実装するみたいな記事を期待していた方ごめんなさい・・

build.gradleを書き換えるだけで簡単に導入することができました。
注意点としてCustomTargetで型スイッチでGifDrawableの判定をしている場合
一部ファイルがGlide系のDrawableからpenfeizhou/APNG4Androidのものに変わることがあるので
注意が必要です。

val target = object : CustomTarget<Drawable>(){
        override fun onResourceReady(
            resource: Drawable,
            transition: Transition<in Drawable>?
        ) {
            imageDrawable = resource
            imageDrawable?.callback = Animated()
            when (resource) {
                is GifDrawable -> {
                    resource.start()
                }
                is APNGDrawable -> {
                    resource.start()
                }
                is com.github.penfeizhou.animation.gif.GifDrawable -> {
                    resource.start()
                }
                else -> {
                    adapter.throttleUpdate()
                }
            }
        }
        override fun onLoadCleared(placeholder: Drawable?) {

        }
    }

またAPNG4AndroidのGlide版はGifやWebMもオリジナルのものに置き換えられてしまいます。
APNG以外Glideオリジナルのものを使用したい場合はこちらの記事をご覧ください

Discussion