[Android] Glide를 사용해서 네트워크 이미지 로드하기
Glide 라이브러리
Glide는 안드로이드용 오픈 소스 이미지 로딩 라이브러리로, 비동기 이미지 로딩, 이미지 캐싱, 애니메이션 등 다양한 기능을 제공한다. Glide는 특히 리스트나 그리드 같은 컬렉션 뷰에서 스크롤 성능을 향상시키기 위해 설계되었다고 한다.
서버에 있는 이미지(URL)를 로드하기위해 사용되며 재사용, 디스크 캐싱, 메모리 관점에서 매우 효율적이다.
공식문서 ▼
https://github.com/bumptech/glide?tab=readme-ov-file
GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling
An image loading and caching library for Android focused on smooth scrolling - bumptech/glide
github.com
1. 의존성 추가 및 인터넷 권한 추가
// build.gradle
dependencies {
implementation ("com.github.bumptech.glide:glide:4.11.0")
annotationProcessor ("com.github.bumptech.glide:compiler:4.11.0")
}
// AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
2. 기본 사용법
Glide.with(context) // Context 제공
.load(url) // 로드할 이미지 URL
.into(imageView); // 이미지를 표시할 ImageView
with(Context context)
- Glide의 인스턴스 생성 및 이미지 로드를 위한 컨텍스트 설정
- Activity, Fragment 인스턴스 또는 getApplicationContext()를 사용할 수 있다.
load( String | Uri | File | ResourceId ) : 로드할 이미지의 타입을 지정한다.
3. 주요 함수
Glide.with(context)
.placeholder( Drawable | ResourceId ) // 이미지 로딩 전 표시될 이미지 설정
.error( Drawable | ResourceId ) // 에러 이미지 설정
.fallback( Drawable | ResourceId ) // null일 경우 표시될 이미지 설정
.override( int width, int height ) // 로드할 이미지의 크기 지정
.centerCrop() // 이미지 중앙 맞춤 (중앙에서 크롭)
.fitCenter() // 이미지 중앙 맞춤 (비율 유지)
.thumbnail() //비율 또는 저해상도 이미지 강제 로드
.into() // 이미지를 보여줄 View
listener() 메소드를 통해 다음과 같이 로딩 성공 및 콜백을 받을 수 있다.
Glide.with(context)
.load(url)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
// 로딩 실패 시 처리
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// 로딩 성공 시 처리
return false;
}
})
.into(imageView);
4. 캐시 전략 설정
diskCacheStrategy() 메소드를 사용해 디스크 캐시 전략을 지정할 수 있다.
캐싱 정책은 이미지 로딩 성능을 최적화 하기 위해 매우 중요하다
- 메모리 캐시 : 이미지 데이터를 RAM에 저장
- 디스크 캐시 : 이미지 데이터를 기기의 파일 시스템에 저장
DiskCacheStrategy.NONE : 이미지를 디스크에 캐시하지 않는다.
DiskCacheStrategy.DATA : 원본 이미지 데이터만 디스크에 캐시
DiskCacheStrategy.RESOURCE : 변환된 이미지만 디스크에 캐시
DiskCacheStrategy.ALL: 원본 데이터와 변환된 이미지 모두를 디스크에 캐시
DiskCacheStrategy.AUTOMATIC : Glide가 자동으로 이미지를 캐싱하는 최적의 전략을 결정
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL) // 모든 버전의 이미지를 캐시
.into(imageView);