서버에서 이미지를 내려받을 때 Glide를 이용하면 Volley나 Retrofit보다 더 쉽고 빠르게 개발할 수 있다.
Glide를 사용하려면 다음을 작성해야한다.
implementation 'com.github.bumptech.glide:glide:4.13.2'
load() 함수에 리소스를 전달하고, into()함수에 이미지 뷰 객체를 전달하면 리소스 이미지를 자동으로 가져와 출력한다.
// 리소스 이미지 출력
Glide.with(this)
.load(R.drawable.seoul)
.into(binding.resultView)
// 파일 이미지 출력
val requestLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult())
{
Glide.with(this)
.load(it.data!!.data)
.into(binding.resultView)
}
val intent = Intent(Intent.ACTION_PICK, MediaStroe.Images.Media.EXTERNAL_CONTENT_URI)
intent.type = "image/*"
requestLauncher.launch(intent)
// 서버 이미지 출력
Glide.with(this)
.load(url)
.into(binding.resultView)
Glide를 이용하면 특별히 처리하지 않아도 이미지 뷰에 애니메이션이 적용된 GIF 이미지를 출력할 수 있다.
Glide를 이용하면 코드에서 이미지 크기를 줄이지 않아도 이밎 뷰의 크기에 맞게 자동으로 줄여서 불러온다. 따라서 OOM 문제를 크게 신경 쓰지 않아도 된다.
특정한 크기로 이미지를 줄이고 싶다면 override() 함수를 사용한다.
// 크기 조절
Glide.with(this)
.load(R.drawble.seoul)
.override(200, 200)
.into(binding.resultView)
// 로딩, 오류 이미지 출력
Glide.with(this)
.load(url)
.override(200, 200)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.into(binding.resultView)
Glide.with(this)
.load(url)
.into(object : CustomTarget<Drawable> () {
override fun onResourceReady(
resource: Drawable,
transition: Transition<in Drawable>?
) {
}
override fun onLoadCleared(placeholder: Drawable?) {
}
})
into() 함수에 이미지 데이터를 받을 객체를 지정했다.
이 객체는 CustomTarget을 상속받아 onResourceReady()와 onLoadCleared() 함수를 재정의해야 한다.
load() 함수에 명시한 이미지를 불러왔을 때 onResourceReady() 함수가 자동으로 호출되며, 매개변수로 이미지를 Drawable 타입으로 전달해 준다.