Tech Log

[Android] Glide 라이브러리의 사용 본문

Android/etc

[Android] Glide 라이브러리의 사용

yuhee kim 2022. 6. 11. 15:04

안드로이드 프로젝트 파일 내에 이미지가 있다면, ImageView로 drawable 파일 내의 이미지를 가져오면 된다. 그러나 만약 서버에서 이미지를 이미지 주소의 형태로 보내게 된다면 어떤 방식으로 이미지를 불러와야 할까 고민했다. 이미지 로드 라이브러리 중 Glide라는 것을 알게 되었고, 프로젝트에서도 해당 라이브러리를 적용시켜보았다. Glide 사용 내용을 정리하기 위해 포스팅을 작성하게 되었다.

 

1. Glide란?

Glide는 안드로이드에서 이미지를 빠르고 효율적으로 로드(load)할 수 있게 해주는 라이브러리다. 구글에서 공개한 라이브러리다.

JPEG과 같은 이미지 뿐만 아니라 Gif와 같은 애니메이션 이미지도 불러올 수 있도록 해준다. 그리고 동영상의 스틸 로딩(loading), 디코딩, 캐싱 등 다양한 API를 사용할 수 있다.

Glide는 이미지를 부드럽고 빠르게 불러올 수 있는 것에 중점을 두고 개발된 것이다. 동시에 효율적인 방식을 추구하고 있다.

 

2. 사용 방법

App level의 gradle 파일에서 의존성을 추가해주면 사용할 수 있다.

혹은 jar 파일을 Glide releases 페이지에서 다운로드해서 사용할 수 있다.

 

2.1 dependecies(의존성) 추가

 

의존성 추가하는 코드는 아래와 같다.

 

repositories {
  google()
  mavenCentral()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.13.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
}

 

이때 Glide의 버전은 추후에 업데이트될 수 있으니, Glide github 페이지에서 버전을 확인하고 추가하는 것을 추천한다.

 

만일 서버에서 이미지를 로드해야 한다면 manifest 파일을 수정해줘야 한다.

 

<manifest>
<application>
.
.
.
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

 

AndroidManifest.xml을 위와 같이 수정해준다.

 

 

2.2 View에 이미지 로드

 

Glide.with(this)
    .load(R.drawable.imgfile)
    .into(imageView)

 

위와 같이 간단하게 사용할 수 있다.

 

with()는 View, Fragment 또는 Activity로부터 Context를 가져온다.

따라서 이미지를 로드할 곳이 어디로부터 Context를 가져오는지, View, Fragment, Activity 중에서 선택해서 적어준다.

 

load()에는 이미지를 넣어줘야 한다.

만약 drawable 파일 내에 있는 이미지를 로드하고 싶다면, 위 코드와 같이 load(R.drawable.이미지 파일 이름) 으로 적어준다.

서버에서 이미지 url을 전달해줄 경우, 그냥 url을 load()에 넣어주면 된다.

Drawable, url이외에도 Bitmap, String, ResourId(Int형), ByteArray가 들어갈 수 있다.

 

into()에는 ImageView의 아이디를 적어줘야 한다.

 

3. Glide 내 메서드

가장 많이 사용되는 메서드는 앞서 설명한 with(), load(), into()이다.

그 외에도 다른 메서드들이 있다.

 

Glide.with(this)
    .load(R.drawable.imgfile)
    .placeholder(R.drawable.img_place_holder)
    .error(R.drawable.img_error)
    .fallback(R.drawable.no_img)
    .into(imageView)

placeholder() : 이미지 로드가 되기 전에 나타날 이미지를 설정할 수 있다.

error() : 이미지 리소스를 불러오다가 에러가 발생했을 경우의 이미지를 설정할 수 있다.

fallback() : 로드할 이미지 리소스가 null인 경우 보여줄 이미지를 설정할 수 있다.

 

Glide의 여러 메서드들을 잘 활용하면 사용자에게 더 좋은 UX를 제공할 수 있다고 한다.

 

Glide는 메모리, 디스크 캐싱을 사용한다.

따라서 아래와 같은 메서드들이 있다.

 

Glide.with(this)
    .load(R.drawable.imgfile)
    .skipMemoryCache(true)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .into(imageView)

skipMemoryCache() : 메모리에 캐싱을 할지 안할지 결정할 수 있다. 캐싱하지 않으려면 true로 값을 넣어준다.

diskCacheStrategy() : 디스크에 캐싱과 관련된 메서드다. 캐싱하지 않으려면 DiskCacheStrategy.NONE 값을 넣어준다.

이외에도 ALL, AUTOMATIC, DATA, NONE, RESOURCE와 같은 옵션이 있다.

 

Glide는 애니메이션 이미지 Gif도 로드할 수 있다.

 

Glide.with(this)
    .load(R.drawable.giffile)
    .asGif()
    .into(imageView)

 

위와 같이 asGif()를 통해 Gif 이미지를 로드할 수 있다.

 

그리고 이미지 크기를 변경하고 싶다면 Glide의 메서드를 이용하면 된다.

 

Glide.with(this)
    .load(R.drawable.giffile)
    .override(300, 200)
    .into(imageView)

 

override()를 사용하면 이미지 크기를 변경할 수 있다.

각각 가로, 세로 크기를 넣어주면 된다.

 

이미지 로드할 때 에러를 원하는 대로 처리해줄 수 있는 메서드가 있다.

Glide.with(this)
        .load(R.drawable.imgfile)
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error_img)
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                // log exception
                Log.e("TAG", "Error loading image", e);
                return false; // important to return false so the error placeholder can be placed
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                return false;
            }
        })
        .into(ImageView);

listener()를 사용하면 에러 처리를 마음대로 설정해줄 수 있다.

 

이외에도 centerCrop(), fitCenter() 등으로 이미지 스케일링이 가능하다.

 

정말 다양한 메서드들이 있으니 공식 문서에서 확인하면 좋을 것 같다.

 

메서드들을 설명하면서 Glide는 메모리, 디스크 캐시를 사용한다고 했다.

이에 대한 설명은 추후에 다른 포스팅으로 덧붙여보고자 한다.

설명이 길어질 것 같아서...ㅎㅎ

 

Glide 이외에도 Picasso 라는 이미지 라이브러리도 있는데, Google에서는 Glide를 밀고 있다.

그 이유는 추후에 적을 이미지 캐싱 포스팅에서 적어보도록 하겠다.

Glide를 더 밀고 있더라도 어떤 기술이든 본인 상황에 적재적소하게 사용하면 될 것 같다!

 

 

참고

'Android > etc' 카테고리의 다른 글

[Android] Jetpack  (0) 2022.06.21
[Android] SharedPreferences  (0) 2022.06.15
[Android] Handler 개념  (0) 2022.06.07
[Android] Fragment  (0) 2022.06.01
Retrofit 2  (0) 2021.12.28
Comments