[Android] Glide ?

Delight Yoon·2022년 11월 10일
0

Android

목록 보기
11/17
post-thumbnail

📌 개요


이번 시간에는 Glide 라이브러리에 대해서 소개해볼까 한다.
Glide는 안드로이드에서 이미지를 빠르고 효율적이게 불러올 수 있게 도와주는 라이브러리이다.

이외에도 Picasso , fresco 라는 라이브러리도 있다고 하는데, Glide가 주로 쓰이고 있고, 실제로 구글에서도 Glide를 권장하고 있는 것 같다고 한다.

이 3가지 라이브러리의 비교는 링크를 참조하면 좋을 것 같다.

Glide는 비디오 스틸(?), 이미지, GIF 등 여러 이미지 표현을 지원하고 또한 주요 초점으로는 모든 종류의 이미지 목록을 가능한 한 부드럽고 빠르게 스크롤하는 것이라고 한다.

📌 어떻게 사용할까 ?


build.gradle

먼저, 다음과 같이 Project 뷰어(?)의 옵션을 Android로 설정해주면, 다음과 같이Project 단위와 Module 단위의 build.gradle 파일을 한 눈에 확인하기 쉽다.


첫 번째로는, Module 단위의 build.gradle 파일 최상단에 plugins 부분에 다음과 같이 추가해주자.

plugins {
    ...
    id 'kotlin-kapt'     // Glide의 Kotlin Annotation Processing Tool
    ...
}

그리고 아래에 dependencies 부분에, 다음과 같이 라이브러리를 추가해주자.

dependencies {
    ...

    // Glide
    kapt "com.github.bumptech.glide:compiler:$glideVersion"
    implementation "com.github.bumptech.glide:glide:$glideVersion"
    annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"

    ...
}

$glideVersion으로 버전관리를 쉽게하기 위해서 Project단위 build.gradle 다음과 같은 구문을 추가해주자.

Project 단위의 build.gradle(Project:...)에 다음과 같이 버전정보를 담고있는 변수(?)를 지정해두었다.

ext {
    glideVersion = '4.14.2'
}

AndroidManifest

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

Glide의 경우는 네트워크를 사용하여 이미지를 불러오기 때문에
위와 같은 퍼미션 코드를 설정해주어야 한다.

AndroidManifest.xml 파일에 다음과 같이 추가해주자.

GlideModule 추가

import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.annotation.GlideModule

@GlideModule
class GlideModule : AppGlideModule() {

}

다음과 같이 GlideModule 이라는 이름으로 클래스를 생성하자.

그리고 다시 프로젝트를 빌드해주기를 바란다.

Glide 사용법

GlideApp.with( ? )
	.load( "이미지 URL" )
    .into( 이미지 뷰 )
    
GlideApp.with(imageView)
	.load(imageUrl)
	.into(imageView)

다음과 같이 사용할 수 있다.

이미지 뷰는 findViewById를 통해 참조객체를 가져오거나, ViewBinding , DataBinding 으로 binding.이미지뷰아이디 로 참조객체를 전달하면 된다.

GlideApp의 with 절에는 어떤 인자를 전달해야 할 지 햇갈렸다. View가 들어갈 때도 있고, Context 값을 전달할 때도 있었다.

GlideApp 을 Ctrl 또는 Cmd 키를 누른 채로 클릭하게 되면 다음과 같이 라이브러리 코드로 이동하게 되는데

/**
   * @see Glide#with(Context)
   */
  @NonNull
  public static GlideRequests with(@NonNull Context context) {
    return (GlideRequests) Glide.with(context);
  }

  /**
   * @see Glide#with(Activity)
   */
  @Deprecated
  @NonNull
  public static GlideRequests with(@NonNull Activity activity) {
    return (GlideRequests) Glide.with(activity);
  }

  /**
   * @see Glide#with(FragmentActivity)
   */
  @NonNull
  public static GlideRequests with(@NonNull FragmentActivity activity) {
    return (GlideRequests) Glide.with(activity);
  }

  /**
   * @see Glide#with(Fragment)
   */
  @NonNull
  public static GlideRequests with(@NonNull Fragment fragment) {
    return (GlideRequests) Glide.with(fragment);
  }

  /**
   * @see Glide#with(Fragment)
   */
  @Deprecated
  @NonNull
  public static GlideRequests with(@NonNull android.app.Fragment fragment) {
    return (GlideRequests) Glide.with(fragment);
  }

  /**
   * @see Glide#with(View)
   */
  @NonNull
  public static GlideRequests with(@NonNull View view) {
    return (GlideRequests) Glide.with(view);
  }

다음과 같이 Context , Activity , Fragment, View 인자를 전달할 수 있다고 한다.

📌 References


profile
Yoon's Dev Blog

0개의 댓글