Glide

강현성·2023년 2월 28일
0

android

목록 보기
13/18

1. Glide

GlideBump라는 앱에서 내부적으로 이용하다가 구글이 인수하여 공개한 오픈소스 소프트웨어이며 모든 종류의 이미지를 빠르게 가져와 사용할 수 있도록 도와준다. 또한 이미지의 크기를 조절하거나 로딩 이미지, 오류 이미지 표시 등을 쉽게 구현할 수 있도록 도와준다.

2. Glide 사용이유

안드로이드 앱 개발에서 ImageView에 이미지를 보여줄 때 내부 리소스 이미지를 표시할 때는 크게 신경써줘야 할 부분이 없지만 만약 네트워크를 통해 이미지를 가져와 보여준다면 고려해야 할 점이 많다. 이미지를 가져오는데 실패할 수도 있고 이미지가 너무 커서 OOM(out of memory)에러가 발생할 수도 있다. 만약 Glide를 사용하지 않고 네트워크에서 이미지를 가져온다면 앞선 문제들에 대한 예외처리가 필요하다. 하지만 Glide를 사용한다면 앞선 문제들을 포함하여 이미지 캐싱, 메모리 관리 등을 Glide가 알아서 처리해준다. 또한 Volley, Retrofit을 사용해 네트워크에서 이미지를 가져오는 것보다 Glide를 사용해 이미지를 가져오는게 훨씬 속도가 빠르며 구현코드도 굉장히 간단하다.

3. Glide 사용법

3-1. 라이브러리 추가

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

with - context
load - 가져올 이미지
override - 크기
into - imageView
placeholder - 로딩 이미지
error - 이미지 불러오는데 실패했을 경우 보여지는 이미지

3-2. 이미지 출력


// 리소스 이미지 출력
Glide.with(this)
     .load(R.drawable.test)
     .into(imageView);

// 서버 이미지 출력 (네트워크)
Glide.with(this)
     .load(url) // 이미지 url
     .into(imageView);

/*
안드로이드 앱을 만들다 보면 PNG, JPG가 아니라 애니메이션 효과를 포함한 GIF 이미지를 출력해야 할 때도 있다. 
이때 이미지 뷰는 GIF 이미지를 출력할 수는 있지만 애니메이션 효과가 적용되지는 않는다. 
하지만 Glide를 이용하면 별다른 처리 없이도 이미지 뷰에 애니메이션 효과가 적용된 GIF 이미지를 출력할 수 있다.
*/
// gif 출력
Glide.with(this)
	 .load(R.raw.gifsample00)
     .into(imageView);

/*
Glide를 사용하지 않고 파일 이미지나 서버에 있는 이미지를 가져올때 이미지 크기가 커서 OOM(out of memory)에러가 발생할 수 있기 때문제 BitmapFactory.Option등의 코드로 이미지 크기를 줄여줘야 했다. 
하지만 Glide를 이용하면 코드에서 이미지를 줄이지 않아도 이미지 뷰의 크기에 맞게 자동으로 줄여서 이미지를 가져오기 때문에 OOM 문제에 있어서 자유롭다. 
만약 특정한 크기로 이미지를 줄이고 싶다면 override() 메서드를 사용하면 된다.
*/
// 특정 크기의 이미지 출력
Glide.with(this)
	 .load(R.drawable.test)
     .override(100, 100)
     .into(imageView);

/*
파일이나 서버에 있는 이미지를 가져올때는 이미지를 불러오는 데 시간이 오래 걸릴 수 있기 때문에 로딩 상태를 표현하는 이미지를 먼저 보여줬다가 완료되었을 때 가져온 이미지를 보여주면 좋다. 
또한 서버에서 이미지를 가져오지 못했을 경우 오류를 표시하는 이미지를 표시해주면 좋다.
이러한 기능들도 Glide에서 placeholder(), error() 메서드로 구현할 수 있다.
placeholder() 메서드에 지정한 이미지를 먼저 출력하고 load() 메서드에 지정한 이미지를 불러오면 해당 이미지를 출력한다.
만약 이미지를 불러오는 데 실패했다면 error() 메서드에 지정한 이미지를 출력한다.
*/
// 로딩, 오류 이미지 출력
Glide.with(this)
     .load(url)
     .placeholder(R.drawable.loading)
     .error(R.drawable.error)
     .into(imageView);

profile
Hello!

0개의 댓글