Android
활주
수색…
소개
**** 경고이 설명서는 유지 보수가되지 않고 자주 부정확합니다 ****
글라이드의 공식 문서는 훨씬 더 나은 출처입니다 :
Glide v4의 경우 http://bumptech.github.io/glide/를 참조하십시오. Glide v3의 경우 https://github.com/bumptech/glide/wiki를 참조 하십시오 .
비고
글라이드 는 안드로이드를위한 빠르고 효율적인 오픈 소스 미디어 관리 및 이미지 로딩 프레임 워크로, 미디어 디코딩, 메모리 및 디스크 캐싱, 리소스 풀링을 간단하고 사용하기 쉬운 인터페이스로 포장합니다.
글라이드는 비디오 스틸, 이미지 및 애니메이션 GIF를 가져오고, 디코딩하고, 표시 할 수 있습니다. 글라이드에는 개발자가 거의 모든 네트워크 스택에 연결할 수있는 유연한 API가 포함되어 있습니다.
기본적으로 Glide는 사용자 정의 HttpUrlConnection 기반 스택을 사용하지만 대신 유틸리티 라이브러리를 Google Volley 프로젝트 나 Square의 OkHttp 라이브러리에 플러그인합니다.
글라이드의 주요 초점은 가능한 모든 종류의 이미지 목록을 부드럽고 빠르게 스크롤하는 것입니다. 그러나 글라이드는 원격 이미지를 가져와 크기를 조정하고 표시해야하는 거의 모든 경우에도 효과적입니다.
소스 코드 및 추가 설명서는 GitHub에서 사용할 수 있습니다. https://github.com/bumptech/glide
프로젝트에 글라이드 추가하기
공식 문서에서 :
Gradle 사용 :
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:4.0.0'
compile 'com.android.support:support-v4:25.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}
메이븐과 함께 :
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>compiler</artifactId>
<version>4.0.0</version>
<optional>true</optional>
</dependency>
ProGuard (DexGuard) 설정 및 사용법에 따라 proguard.cfg에 다음 행을 추가해야 할 수도 있습니다 (자세한 내용은 Glide 's wiki 참조).
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
이미지로드
ImageView
지정된 URL, Uri, 자원 ID 또는 다른 모델에서 ImageView
로 이미지를로드하려면 :
ImageView imageView = (ImageView) findViewById(R.id.imageView);
String yourUrl = "http://www.yoururl.com/image.png";
Glide.with(context)
.load(yourUrl)
.into(imageView);
Uris의 경우 yourUrl
을 Uri ( content://media/external/images/1
)로 yourUrl
. Drawables의 경우 yourUrl
을 자원 ID ( R.drawable.image
)로 R.drawable.image
.
RecyclerView 및 ListView
ListView 또는 RecyclerView에서 정확히 같은 줄을 사용할 수 있습니다.
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
String currentUrl = myUrls.get(position);
Glide.with(context)
.load(currentUrl)
.into(myViewHolder.imageView);
}
당신이 부하를 시작하지 않으려면 onBindViewHolder
, 반드시 확인 clear()
어떤 ImageView
글라이드가 수정하기 전에 관리 할 수있다 ImageView
:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
String currentUrl = myUrls.get(position);
if (TextUtils.isEmpty(currentUrl)) {
Glide.clear(viewHolder.imageView);
// Now that the view has been cleared, you can safely set your own resource
viewHolder.imageView.setImageResource(R.drawable.missing_image);
} else {
Glide.with(context)
.load(currentUrl)
.into(myViewHolder.imageView);
}
}
글라이드 서클 변환 (원형 ImageView에서 이미지로드)
활공으로 원 이미지를 만듭니다.
public class CircleTransform extends BitmapTransformation {
public CircleTransform(Context context) {
super(context);
}
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
@Override public String getId() {
return getClass().getName();
}
}
용법:
Glide.with(context)
.load(yourimageurl)
.transform(new CircleTransform(context))
.into(userImageView);
기본 변환
글라이드에는 두 가지 기본 변형, 맞춤 중심 및 중심 작물이 포함됩니다.
맞춤 중심 :
Glide.with(context)
.load(yourUrl)
.fitCenter()
.into(yourView);
Fit center는 Android의 ScaleType.FIT_CENTER 와 동일한 변환을 수행합니다.
중심 작물 :
Glide.with(context)
.load(yourUrl)
.centerCrop()
.into(yourView);
가운데 자르기는 Android의 ScaleType.CENTER_CROP 와 동일한 변환을 수행합니다.
자세한 내용은 Glide 's wiki를 참조하십시오.
사용자 정의 글라이드 타겟을 사용하여 둥근 모서리 이미지를 글라이딩합니다.
먼저 유틸리티 클래스를 만들거나이 클래스를 필요한 클래스에서 사용하십시오.
public class UIUtils {
public static BitmapImageViewTarget getRoundedImageTarget(@NonNull final Context context, @NonNull final ImageView imageView,
final float radius) {
return new BitmapImageViewTarget(imageView) {
@Override
protected void setResource(final Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCornerRadius(radius);
imageView.setImageDrawable(circularBitmapDrawable);
}
};
}
이미지로드 중 :
Glide.with(context)
.load(imageUrl)
.asBitmap()
.into(UIUtils.getRoundedImageTarget(context, imageView, radius));
asBitmap ()을 사용하므로 애니메이션이 제거됩니다. 이 위치에서 animate () 메서드를 사용하여 자신 만의 애니메이션을 사용할 수 있습니다.
글라이드 애니메이션과 유사한 페이드 인 예제.
Glide.with(context)
.load(imageUrl)
.asBitmap()
.animate(R.anim.abc_fade_in)
.into(UIUtils.getRoundedImageTarget(context, imageView, radius));
이 애니메이션은 지원 라이브러리 비공개 리소스이므로 변경하거나 제거 할 수도 있으므로 사용하지 않는 것이 좋습니다.
RoundedBitmapDrawableFactory 를 사용하려면 지원 라이브러리가 있어야합니다.
이미지 미리 불러 오기
원격 이미지를 미리로드하고 이미지가 한 번만 다운로드되도록하려면 다음을 수행하십시오.
Glide.with(context)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.preload();
그때:
Glide.with(context)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE) // ALL works here too
.into(imageView);
로컬 이미지를 사전로드하고 변환 된 사본이 디스크 캐시 (및 메모리 캐시)에 있는지 확인하려면 다음을 수행하십시오.
Glide.with(context)
.load(yourFilePathOrUri)
.fitCenter() // Or whatever transformation you want
.preload(200, 200); // Or whatever width and height you want
그때:
Glide.with(context)
.load(yourFilePathOrUri)
.fitCenter() // You must use the same transformation as above
.override(200, 200) // You must use the same width and height as above
.into(imageView);
자리 표시 자 및 오류 처리
로드하는 동안 Drawable을 추가하려는 경우 자리 표시자를 추가 할 수 있습니다.
Glide.with(context)
.load(yourUrl)
.placeholder(R.drawable.placeholder)
.into(imageView);
로드가 실패한 경우 드로어 블을 표시하려면 다음과 같이하십시오.
Glide.with(context)
.load(yourUrl)
.error(R.drawable.error)
.into(imageView);
null 모델 (URL, Uri, 파일 경로 등)을 제공하는 경우 드로어 블을 표시하려면 다음을 수행하십시오.
Glide.with(context)
.load(maybeNullUrl)
.fallback(R.drawable.fallback)
.into(imageView);
커스텀 변환없이 원형 ImageView에 이미지로드
사용자 정의 BitmapImageViewTarget을 만들어 이미지를로드합니다.
public class CircularBitmapImageViewTarget extends BitmapImageViewTarget
{
private Context context;
private ImageView imageView;
public CircularBitmapImageViewTarget(Context context, ImageView imageView)
{
super(imageView);
this.context = context;
this.imageView = imageView;
}
@Override
protected void setResource(Bitmap resource)
{
RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
bitmapDrawable.setCircular(true);
imageView.setImageDrawable(bitmapDrawable);
}
}
용법:
Glide
.with(context)
.load(yourimageidentifier)
.asBitmap()
.into(new CircularBitmapImageViewTarget(context, imageView));
글라이드 이미지로드 처리 실패
Glide
.with(context)
.load(currentUrl)
.into(new BitmapImageViewTarget(profilePicture) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCornerRadius(radius);
imageView.setImageDrawable(circularBitmapDrawable);
}
@Override
public void onLoadFailed(@NonNull Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, SET_YOUR_DEFAULT_IMAGE);
Log.e(TAG, e.getMessage(), e);
}
});
여기 SET_YOUR_DEFAULT_IMAGE
위치에 기본 Drawable
설정할 수 있습니다. 이미지로드가 실패한 경우이 이미지가 표시됩니다.