gif를 안드로이드에서 재생시킬 수 있는 방법을 찾아보니 glide와 coil을 사용해 구현할 수 있었다.
coil이 glide보다 성능이 약간 더 좋고 kotlin으로 구성되어있어 kotlin coroutine을 사용할 수 있고 가볍다. glide는 coil보다 더 많은 이미지형식을 지원하고 오랫동안 많이 사용되어 성숙한 라이브러리라고 한다.
둘 중에 어떤 것을 쓸지 고민했는데 일단 성능적으로는 큰차이가 안날것 같아고 glide가 오랫동안 쓰여졌다고하니 찾을 수 있는 정보량이 많아 사용하기 더 수월하다고 생각해서 glide로 사용하기로 했다.
private fun loadGif(isAnimationActive: Boolean, loadGif: Int, imageView: ImageView) {
Glide.with(this).asGif().load(loadGif)
.listener(object : RequestListener<GifDrawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<GifDrawable>?,
isFirstResource: Boolean
): Boolean {
return false
}
override fun onResourceReady(
resource: GifDrawable?,
model: Any?,
target: Target<GifDrawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
resource?.setLoopCount(1)
return false
}
}).into(imageView)
}
setLoopCount(1)로 몇번재생할지 설정
private fun loadGif(isAnimationActive: Boolean) {
if (isAnimationActive) {
Glide.with(this).asGif().load(R.raw.gacha1).into(binding.ivFirstGif)
firstAnimate = false
} else {
Glide.with(this).asBitmap().load(R.raw.gacha1).into(binding.ivFirstGif)
firstAnimate = true
}
}
asBitmap()을 이용해 이미지를 변환해 로드하는 식으로 재생하고 멈추는 기능을 만들어준다.