TransitionOptions

TransitionOptions는 이미지 로드 완료 시 적용되는 애니메이션을 설정하는 데 사용됩니다. 예를 들어, withCrossFade()를 사용하면 이미지가 부드럽게 전환됩니다.

 

Q. withCrossFade()란 무엇인가요?

이전 이미지가 서서히 사라지면서 새로운 이미지가 동시에 서서히 나타나는 애니메이션 효과를 의미합니다. 이러한 효과는 이미지 전환을 부드럽게 만들어 사용자 경험을 향상시킵니다.

 

CrossFade



RequestBuilder

RequestBuilder는 Glide에서 이미지 로드 요청을 구성하는 핵심 클래스입니다. asBitmap(), asDrawable(), asGif() 등을 사용하여 로드할 리소스의 타입을 지정할 수 있습니다.

 

Q. RequestBuilder의 타입이 나뉘는 이유는 무엇이며, 어디서 사용되나요?

Glide는 다양한 리소스 타입을 지원하기 때문에, 명시적으로 타입을 지정함으로써 적절한 디코더와 변환을 적용할 수 있습니다. 예를 들어, asBitmap()은 이미지를 Bitmap으로 로드하여 직접 처리할 수 있게 해줍니다.

 

썸네일 처리

thumbnail() 메서드를 사용하면 저해상도 이미지를 먼저 로드하여 전체 이미지가 로드될 때까지의 대기 시간을 줄일 수 있습니다.

 

Q. thumbnail()을 사용하면 자동으로 저해상도 이미지를 로드하나요?

thumbnail()에 sizeMultiplier를 지정하면, 동일한 이미지를 지정된 비율로 축소하여 로드합니다. 예를 들어, thumbnail(0.5f)는 원본 이미지의 50% 크기로 로드합니다. 여기서 말하는 크기(sizeMultiplier)는 이미지의 사이즈(픽셀 크기)를 의미합니다. 즉, 해상도입니다.

 

Q. sizeMultiplier를 사용하는 thumbnail()의 동작 방식이 궁금합니다.

sizeMultiplier는 대상 뷰의 크기에 대한 비율로 썸네일 이미지를 로드합니다. 예를 들어, 대상 뷰가 200x200 픽셀이고 sizeMultiplier가 0.5f이면, 100x100 픽셀 크기의 이미지를 로드합니다. Glide에서는 주로 픽셀 수를 줄이는 것에 초점을 맞춰 로딩 성능을 개선합니다.

 

Q. 썸네일이 표시되는 동안, 원본 이미지 로드는 어떻게 될까?

load()를 통해 원본 이미지 요청이 시작되고 thumbnail()로 지정한 썸네일 이미지도 비동기 병렬로 수행됩니다. 썸네일 요청이 먼저 완료되면 보여주고, 원본이 도착하면 교체합니다.

 

fallback

fallback()은 로드할 URL이 null일 때 표시할 기본 이미지를 설정합니다.

 

Q. fallback()과 error()를 모두 지정했을 때, 어떤 동작이 발생하나요?

  • imageUrl이 null이면 → fallback() 이미지 표시됨
  • imageUrl이 null이 아니지만 로딩에 실패하면 → error() 이미지 표시됨

둘은 충돌하지 않으며, 상황에 따라 각자 독립적으로 동작합니다.

 

내장 변형 타입

Glide는 다음과 같은 내장 변형 타입을 제공합니다

  • centerCrop
  • fitCenter
  • circleCrop

이러한 변형은 RequestOptions를 통해 적용할 수 있습니다.

 

여러 변형 적용

여러 변형을 동시에 적용하려면 MultiTransformation을 사용하거나, transform() 메서드에 여러 변형을 순서대로 전달할 수 있습니다. 적용 순서에 따라 결과 이미지가 달라질 수 있습니다.

 

커스텀 Transformation

Glide는 다양한 변형을 지원하지만, 추가적인 기능이 필요하다면 커스텀 Transformation을 구현할 수 있습니다.

 

Q. 커스텀 Transformation은 어디까지 구현할 수 있나요?

BitmapTransformation을 상속하여 비트맵 수준의 변형을 자유롭게 구현할 수 있습니다. 예를 들어, 특정 필터를 적용하거나, 모서리를 둥글게 처리하는 등의 작업이 가능합니다.

 

Q. equals(), hashCode(), updateDiskCacheKey() 메서드는 왜 구현해야 하나요?

이 메서드들은 Glide의 캐시 시스템에서 변형을 구분하는 데 사용됩니다. 적절하게 구현하지 않으면, 캐시된 이미지가 잘못 재사용되거나, 변형이 적용되지 않을 수 있습니다.

 

ImageView를 위한 자동 변환

Glide는 ImageView의 scaleType에 따라 자동으로 적절한 변형을 적용합니다. 예를 들어, scaleType이 CENTER_CROP이면 centerCrop() 변형이 자동으로 적용됩니다.

 

Q. dontTransform() 메서드는 언제 사용하나요?

dontTransform()은 Glide의 자동 변형 적용을 방지하고 싶을 때 사용합니다. 예를 들어, 원본 이미지를 그대로 표시하고 싶을 때 유용합니다.

 

커스텀 리소스

Glide는 다양한 리소스 타입을 지원하며, asDrawable(), asBitmap() 등을 사용하여 로드할 리소스의 타입을 지정할 수 있습니다.

 

Targets

into() 메서드는 이미지 로드 결과를 지정한 Target에 전달합니다. 일반적으로 ImageView를 대상으로 사용하지만, 커스텀 Target을 구현하여 다양한 용도로 활용할 수 있습니다.

 

취소 및 재사용

into() 메서드는 Target 인스턴스를 반환하며, 이를 재사용하면 이전 요청이 취소되고 리소스가 해제됩니다.

 

Q. "보류 중인 로드"란 무엇인가요?

아직 완료되지 않은 이미지 로드 요청을 의미합니다. 예를 들어, 네트워크 지연으로 인해 이미지가 아직 로드되지 않은 상태를 말합니다.

 

Q. 이전 요청을 가져와야 하는 상황이 있나요?

커스텀 Target을 구현할 때, 이전 요청 정보를 활용하여 로드 상태를 관리하거나, 중복 로드를 방지할 수 있습니다.

 

clear()

이미지 로드가 완료된 후에는 clear() 메서드를 사용하여 리소스를 해제하는 것이 좋습니다.

Activity, Fragment 종료 시엔 자동으로 clear되고 있습니다.

 

Q. 재사용을 하려면 왜 clear()를 호출해야 하나요?

clear()를 호출하면 이전에 로드된 이미지와 관련된 리소스가 해제되어, 새로운 이미지 로드 시 메모리 누수를 방지하고, 잘못된 이미지가 표시되는 것을 방지할 수 있습니다.