Options
원문보기:링크
RequestBuilder options
대부분의 Glide option 들은 RequestOptions
와 apply()
클래스를 사용하여 적용 할 수 있습니다.
사용 가능한 옵션들은 다음과 같습니다.
Placeholders
Transformations
- 캐싱
- 인코딩 퀄리티나
Bitmap
디코드 설정과 같은 컴포넌트 특화 옵션
예를 들어, CenterCrop
Transformations 같은 경우 아래와 같이 사용 할 수 있습니다.
Glide.with(fragment)
.load(url)
.centerCrop()
.into(imageView);
RequestOptions
만약, 옵션을 앱의 각기 다른 부분에서 일관적으로 적용하고 싶다면 새로운 RequestOptions
인스턴스를 만들고, 이를 각각 호출부에서 부르면 됩니다.
RequestOptions cropOptions = new RequestOptions().centerCrop(context);
...
Glide.with(fragment)
.load(url)
.apply(cropOptions)
.into(imageView);
apply()
는 여러번 불릴 수 있으며, RequestOption
들을 다양하게 적용 할 수 있습니다. 만약 RequestOptions
간의 충돌이 있을 경우 마지막에 호출된 옵션이 적용 되게 됩니다.
TransitionOptions
TransitionOptions 는 로드가 완료되었을 때에 대한 옵션 입니다.
TransitionOption
은 다음과 같을 때 사용 합니다.
- View 가 나타날 때
- Placeholder 에서 fade in / out 이 나타날 때
- transition 이 없는 경우
transition 이 없는 경우, 이미지가 즉각적으로 나타게 됩니다. 이러한 즉각적인 변경을 피하려면 view 의 Drawable 들 사이에 페이드 인 / 아웃을 TransitionOptions
을 이용하여 적용 할 수 있습니다.
예를들어 fade in / out 을 적용 할 경우 아래와 같이 할 수 있습니다.
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
Glide.with(fragment)
.load(url)
.transition(withCrossFade())
.into(view);
RequestOptions
와는 다르게 TransitionOptions
는 Glide 에 의해 불려지는 리소스의 타입에 따라 달라지게 됩니다.
결론적으로, Bitmap
에 대해서는 DrawableTransitionOptions 보다는 BitmapTransitionOptions 사용해야 하며, cross fade 를 사용하는 것 보다는 단순한 fade in 을 사용하는 것이 좋습니다.
RequestBuilder
RequestBuilder 는 Glide 의 요청에 기본이 되는 것으로 url 이나 모델로 부터 로딩을 시작할 때 사용되는 옵션들을 모아주는 역할을 합니다.
RequestBuilder
는 다음을 정할 수 있습니다.
- 불러오려는 리소스의 타입 (Bitmap, Drawable, 등등)
- 리소스를 로드할 URL/모델
- 로드한 리소스를 적용할 View
RequestOption
을 적용할 오브젝트TransitionOption
을 적용할 오브젝트- 불러오려는
thumbnail()
RequestBuilder
는 Glide.with()
를 호출하고, as
메소드 중 하나를 이용하여 가져 올 수 있습니다.
RequestBuilder<Drawable> requestBuilder = Glide.with(fragment).asDrawable();
아니면, Glide.with()
와 load()
를 이용 할 수도 있습니다.
RequestBuilder<Drawable> requestBuilder = Glide.with(fragment).load(url);
리소스 타입 고르기
RequestBuilders
는 로드할 타입들을 구체화 시켜 주며, 기본적으로 Drawable 타입을 가집니다. 타입은 as...
함수를 이용하여 변경 가능 합니다. 예르 들어, asBitmap()
을 호출하게 된다면 Bitmap
RequestBuilder
를 얻게 될 것 입니다.
RequestBuilder<Bitmap> requestBuilder = Glide.with(fragment).asBitmap();
RequestOptions 적용
위에서 말씀드린 것 처럼, apply()
를 사용해서 RequestOptions
를 적용할 수 있으며, transition()
을 사용해서 TransitionOptions
를 적용할 수 있습니다.
RequestBuilder<Drawable> requestBuilder = Glide.with(fragment).asDrawable();
requestBuilder.apply(requestOptions);
requestBuilder.transition(transitionOptions);
또한, RequestBuilder 는 재사용 가능 합니다.
RequestBuilder<Drawable> requestBuilder =
Glide.with(fragment)
.asDrawable()
.apply(requestOptions);
for (int i = 0; i < numViews; i++) {
ImageView view = viewGroup.getChildAt(i);
String url = urls.get(i);
requestBuilder.load(url).into(view);
}
썸네일 요청
Glide 의 thumbnail()
API 는 RequestBuilder
를 특정하고, 메인 요청과 병렬로 실행 될 수 있게 해 줍니다. thumbnail()
은 메인 요청이 로딩되는 동안 나타날 수 있습니다. 만약 메인 요청이 썸네일 요청 전에 끝나게 될 경우, 썸네일 요청 건은 보이지 않게 됩니다. thumbnail()
API 를 사용하게 되면 고해상도의 이미지가 로딩 되는 동안 저해상도의 이미지를 쉽고 빠르게 로드해 둘 수 있으므로, 로딩 표시를 보는데 걸리는 시간을 줄 일 수 있게 됩니다.
thumbnail()
API 는 로컬에 있는 이미지나, 원격에 있는 이미지에 모두에 유용 합니다. 특히 낮은 해상도의 썸네일이 매우 빠르게 로드될 수 있는 Glide의 디스크 캐시에 있는 경우에는 더욱 유용합니다.
thumbnail()
API 는 다음과 같이 간단하게 사용 할 수 있습니다.
Glide.with(fragment)
.load(url)
.thumbnail(Glide.with(fragment)
.load(thumbnailUrl))
.into(imageView);
이 방법은 thumbnailUrl
의 이미지가 주 이미지 url
보다 낮은 해상도일 경우 더 잘 동작 합니다. 다수의 이미지를 로딩하는 API 의 경우 url 에서 원하는 이미지의 크기를 정할 수 있고, 이는 특히 thumbnail()
API 에서 잘 동작 합니다.
만약 로컬에서의 이미지를 로딩 한다거나, 하나의 원격 이미지 url 만 있을 경우, Glide 의 override
나 sizeMultiplier
API 를 사용하여 썸네일 요청시 낮은 해상도의 이미지를 썸네일로 사용할 수 있도록 해줍니다.
int thumbnailSize = ...;
Glide.with(fragment)
.load(localUri)
.thumbnail(Glide.with(fragment)
.load(localUri)
.override(thumbnailSize))
.into(view);
sizeMultiplier
를 파라미터로 사용하는 thumbnail()
함수를 이용하여 View
나 Target
의 크기 배율에 맞추어진 모델을 불러올 수 있습니다. :
Glide.with(fragment)
.load(localUri)
.thumbnail(/*sizeMultiplier=*/ 0.25f)
.into(imageView);
실패 시 새 요청 시작하기
Glide 4.3.0 부터 error
API 를 사용해서 요청 실패 시 재시작 요청을 위한 RequestBuilder
를 쉽게 설정 할 수 있습니다. 예를 들어, primaryUrl
이 실패할 경우 fallbackUrl
로 재 시도하는 경우를 아래와 같이 설정 가능 합니다. :
Glide.with(fragment)
.load(primaryUrl)
.error(Glide.with(fragment)
.load(fallbackUrl))
.into(imageView);
primaryUrl 에 대한 요청이 성공 할 경우 error RequestBuilder
는 실행되지 않습니다. thumbnail()
과 error()
RequestBuilder
를 둘 다 설정 했을 때 thubnail 요청이 성공했을지라도, primaryUrl 이 실패할 경우 RequestBuilder
는 실행 됩니다.
컴포넌트 옵션
Option
클래스는 Glide 컴포넌트에 ModelLoaders
, ResourceDecoders
, ResourceEncoders
, Encoders
과 같은 파라미터들을 추가할 수 있게 해줍니다. Glide 의 몇몇 컴포넌트들은 Option 을 포함하고 있고, 사용자 정의 컴포넌트에도 Option 을 추가할 수 있습니다.
RequestOptions
ㅡㄹ래ㅡ를 사용해서 Glide 요청들에 Option
를 추가할 수 있습니다. :
import static com.bumptech.glide.request.RequestOptions.option;
Glide.with(context)
.load(url)
.apply(option(MyCustomModelLoader.TIMEOUT_MS, 1000L))
.into(imageView);
새로운 RequestOptions 객체는 다음과 같이 생성 할 수 있습니다. :
RequestOptions options = new RequestOptions()
.set(MyCustomModelLoader.TIMEOUT_MS, 1000L);
Glide.with(context)
.load(url)
.apply(options)
.into(imageView);
혹은 Generated API 를 사용도 가능 합니다.:
GlideApp.with(context)
.load(url)
.set(MyCustomModelLoader.TIMEOUT_MS, 1000L)
.into(imageView);