수색…


소개

**** 경고이 설명서는 유지 보수가되지 않고 자주 부정확합니다 ****

글라이드의 공식 문서는 훨씬 더 나은 출처입니다 :

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 설정할 수 있습니다. 이미지로드가 실패한 경우이 이미지가 표시됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow