이번 시간에는 Glide
라이브러리에 대해서 소개해볼까 한다.
Glide
는 안드로이드에서 이미지를 빠르고 효율적이게 불러올 수 있게 도와주는 라이브러리이다.
이외에도 Picasso
, fresco
라는 라이브러리도 있다고 하는데, Glide
가 주로 쓰이고 있고, 실제로 구글에서도 Glide
를 권장하고 있는 것 같다고 한다.
이 3가지 라이브러리의 비교는 링크를 참조하면 좋을 것 같다.
Glide
는 비디오 스틸(?), 이미지, GIF 등 여러 이미지 표현을 지원하고 또한 주요 초점으로는 모든 종류의 이미지 목록을 가능한 한 부드럽고 빠르게 스크롤
하는 것이라고 한다.
먼저, 다음과 같이 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'
}
<uses-permission android:name="android.permission.INTERNET"/>
Glide
의 경우는 네트워크를 사용하여 이미지를 불러오기 때문에
위와 같은 퍼미션 코드를 설정해주어야 한다.
AndroidManifest.xml
파일에 다음과 같이 추가해주자.
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.annotation.GlideModule
@GlideModule
class GlideModule : AppGlideModule() {
}
다음과 같이 GlideModule
이라는 이름으로 클래스를 생성하자.
그리고 다시 프로젝트를 빌드해주기를 바란다.
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
인자를 전달할 수 있다고 한다.