[kotlin] Glide 라이브러리

ywown·2021년 11월 14일
0

코틀린 개념

목록 보기
7/8

『Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린』 교재를 바탕으로 정리한 내용입니다.

이미지 처리 - Glide 라이브러리

  • 서버에서 이미지를 내려받을 때 Glide를 이용하면 네트워크 부분 구현 시 Volley나 Retrofit보다 더 쉽고 빠르게 개발 가능

  • Glide는 Bump라는 앱에서 내부적으로 이용하다가 구글이 인수하여 공개한 라이브러리

  • 모든 종류의 이미지에 사용 가능함

  • Glide 라이브러리 등록

    implementation 'com.github.bumptech.glide:glide:4.12.0'

이미지 출력

  • load() 함수에 리소스 전달하고, into() 함수에 이미지 뷰 객체 전달하면 리소스 이미지를 자동으로 가져와 출력
Glide.with(this)
	.load(R.drawable.seoul)
	.into(binding.resultview)
  • 갤러리 앱에서 사용자가 선택한 사진 출력
    • load()함수에 사용자가 선택한 사진 경로 지정하면 자동으로 into()함수에 지정한 이미지 뷰에 출력
val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.type = "image/*"
getGallery.launch(intent)

//갤러리 인텐트
private val getGallery = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
	if (it.resultCode == RESULT_OK) {
		Glide.with(this)
			.load(it.data!!.data)
			.into(binding.resultview)
	}
}
  • 서버 이미지 출력
    • load()함수에 이미지 URL을 문자열로 지정하면 자동으로 서버에서 이미지 데이터 읽어 into()함수에 지정한 이미지 뷰에 출력
Glide.with(this)
	.load(url)
	.into(binding.resultview)

크기 조절

  • Glide를 이용하면 코드에서 이미지 크기를 줄이지 않아도 이미지 뷰의 크기에 맞게 자동으로 줄여서 불러오기 때문에 OOM 문제를 크게 신경 쓰지 않아도 됨 !
  • override() 함수 이용
Glide.with(this)
	.load(R.drawable.seoul)
	.override(200, 200)
	.into(binding.resultview)

로딩, 오류 이미지 출력

  • placeholder() 함수와 error() 함수 사용
  • 이미지를 불러오는 데에 시간이 오래 걸리는 경우 로딩 상태를 표현하는 이미지를 출력했다가 완료되었을 때 본래 이미지를 출력하는 기능을 구현하기 위해 사용
Glide.with(this)
	.load(R.drawable.seoul)
	.override(200, 200)
	.placeholder(R.drawable.loading)
  .error(R.drawable.error)
	.into(binding.resultview)

이미지 데이터 사용하기

  • 불러온 이미지를 뷰에 출력하지 않고 이미지 데이터를 직접 사용해야 하는 경우 사용
  • into() 함수에 CustomTarget 객체를 지정해 사용
  • load() 함수에 명시한 이미지를 불러왔을 때 onResourceReady() 함수가 자동으로 호출되고, 이 함수의 매개변수로 이미지 데이터를 Drawable 타입으로 전달해 줌 → Bitmap도 가능
Glide.with(this)
	.load(url)
	.into(object : CustomTarget<Drawable> () {
		override fun onResourceReady(
			resource: Drawable,
			transition: Transition<in Drawable>?
		) {
				TODO("Not yet implemented")
		}
		override fun onLoadCleared(placeholder: Drawable?) {
			TODO("Not yet implemented")
		}
})
  • Bitmap 타입의 이미지를 받아야 한다면, asBitmap() 함수를 추가해 CustomTarget의 제네릭에 을 선언하여 구현
Glide.with(this)
	.asBitmap()
	.load(url)
	.into(object : CustomTarget<Bitmap> () {
		override fun onResourceReady(
			resource: Bitmap,
			transition: Transition<in Bitmap>?
		) {
				TODO("Not yet implemented")
		}
		override fun onLoadCleared(placeholder: Drawable?) {
			TODO("Not yet implemented")
		}
})
profile
기록

0개의 댓글