Szukaj…


Wprowadzenie

**** OSTRZEŻENIE Niniejsza dokumentacja jest nieutrzymywana i często niedokładna ****

Oficjalna dokumentacja Glide'a jest znacznie lepszym źródłem:

W przypadku Glide v4 zobacz http://bumptech.github.io/glide/ . W przypadku Glide v3 zobacz https://github.com/bumptech/glide/wiki .

Uwagi

Glide to szybkie i wydajne narzędzie do zarządzania multimediami i ładowania obrazów typu open source dla systemu Android, które otacza dekodowanie multimediów, pamięć podręczną i pamięć podręczną dysków oraz pule zasobów w prosty i łatwy w użyciu interfejs.

Glide obsługuje pobieranie, dekodowanie i wyświetlanie zdjęć, obrazów i animowanych plików GIF. Glide zawiera elastyczny interfejs API, który umożliwia programistom podłączanie się do niemal każdego stosu sieciowego.
Domyślnie Glide używa niestandardowego stosu opartego na HttpUrlConnection , ale zawiera także biblioteki narzędziowe podłączone do projektu Volley firmy Google lub biblioteki OkHttp Square .

Głównym celem Glide jest sprawienie, aby przewijanie dowolnej listy obrazów było tak płynne i szybkie, jak to możliwe, ale Glide działa również w prawie każdym przypadku, gdy trzeba pobrać, zmienić rozmiar i wyświetlić zdalny obraz.

Kod źródłowy i dalsza dokumentacja są dostępne na GitHub: https://github.com/bumptech/glide

Dodaj Glide do swojego projektu

Z oficjalnej dokumentacji :

Z 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'
}

Z Maven:

<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>

W zależności od konfiguracji ProGuard (DexGuard) i sposobu użytkowania może być konieczne dołączenie następujących linii do proguard.cfg (więcej informacji na stronie Glide w 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

Ładowanie obrazu

ImageView

Aby załadować obraz z określonego adresu URL, identyfikatora Uri, identyfikatora zasobu lub dowolnego innego modelu do ImageView :

ImageView imageView = (ImageView) findViewById(R.id.imageView);
String yourUrl = "http://www.yoururl.com/image.png";

Glide.with(context)
    .load(yourUrl)
    .into(imageView);

W przypadku Uris zamień yourUrl na Uri ( content://media/external/images/1 ). W przypadku Drawables zamień yourUrl na identyfikator zasobu ( R.drawable.image ).

RecyclerView i ListView

W ListView lub RecyclerView możesz użyć dokładnie tych samych wierszy:

@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);
}

Jeśli nie chcesz uruchamiać ładowania w onBindViewHolder , upewnij się, że clear() dowolny ImageView Glide, którym może zarządzać przed modyfikacją 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);
    }
}

Transformacja koła poślizgowego (Załaduj obraz w okrągłym ImageView)

Utwórz obraz koła z poślizgiem.

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();
    }
}

Stosowanie:

Glide.with(context)
    .load(yourimageurl)
    .transform(new CircleTransform(context))
    .into(userImageView);

Domyślne transformacje

Szybkość obejmuje dwie domyślne transformacje: dopasuj środkowy i środkowy kadr.

Centrum dopasowania:

Glide.with(context)
    .load(yourUrl)
    .fitCenter()
    .into(yourView);

Centrum dopasowania wykonuje tę samą transformację, co ScaleType.FIT_CENTER Androida.

Centralne przycięcie:

Glide.with(context)
    .load(yourUrl)
    .centerCrop()
    .into(yourView);

Kadrowanie środkowe wykonuje tę samą transformację, co ScaleType.CENTER_CROP Androida.

Aby uzyskać więcej informacji, zobacz wiki Glide .

Przesuwaj obraz zaokrąglonych rogów z niestandardowym celem Glide

Najpierw utwórz klasę użyteczności lub użyj tej metody w potrzebnej klasie

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);
        }
    };
}

Ładowanie obrazu:

Glide.with(context)
     .load(imageUrl)
     .asBitmap()
     .into(UIUtils.getRoundedImageTarget(context, imageView, radius));

Ponieważ używasz asBitmap (), animacje zostaną jednak usunięte. Możesz użyć własnej animacji w tym miejscu za pomocą metody animate ().

Przykład z podobną domyślną animacją przejścia.

Glide.with(context)
     .load(imageUrl)
     .asBitmap()
     .animate(R.anim.abc_fade_in)
     .into(UIUtils.getRoundedImageTarget(context, imageView, radius));

Uwaga: ta animacja jest prywatnym zasobem biblioteki wsparcia - nie zaleca się jej używania, ponieważ można ją zmienić, a nawet usunąć.

Uwaga: musisz także mieć bibliotekę wsparcia, aby korzystać z RoundedBitmapDrawableFactory

Wstępne ładowanie obrazów

Aby wstępnie załadować zdalne obrazy i upewnić się, że obraz zostanie pobrany tylko raz:

Glide.with(context)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
    .preload();

Następnie:

Glide.with(context)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.SOURCE) // ALL works here too
    .into(imageView);

Aby wstępnie załadować lokalne obrazy i upewnić się, że transformowana kopia znajduje się w pamięci podręcznej dysku (a może także w pamięci podręcznej):

Glide.with(context)
    .load(yourFilePathOrUri)
    .fitCenter() // Or whatever transformation you want
    .preload(200, 200); // Or whatever width and height you want

Następnie:

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);

Symbol zastępczy i obsługa błędów

Jeśli chcesz dodać Drawable wyświetlaną podczas ładowania, możesz dodać symbol zastępczy:

Glide.with(context)
    .load(yourUrl)
    .placeholder(R.drawable.placeholder)
    .into(imageView);

Jeśli chcesz wyświetlać Drawable, jeśli ładowanie nie powiedzie się z jakiegokolwiek powodu:

Glide.with(context)
    .load(yourUrl)
    .error(R.drawable.error)
    .into(imageView);

Jeśli chcesz wyświetlać Drawable, jeśli podasz model zerowy (URL, Uri, ścieżka do pliku itp.):

Glide.with(context)
    .load(maybeNullUrl)
    .fallback(R.drawable.fallback)
    .into(imageView);

Załaduj obraz w okrągłym ImageView bez niestandardowych przekształceń

Utwórz niestandardowy BitmapImageViewTarget, aby załadować obraz do:

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);
    }
}

Stosowanie:

Glide
    .with(context)
    .load(yourimageidentifier)
    .asBitmap()
    .into(new CircularBitmapImageViewTarget(context, imageView));

Obsługa ładowania obrazu schodzenia nie powiodła się

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);
    }
});

Tutaj w SET_YOUR_DEFAULT_IMAGE miejscu możesz ustawić dowolny domyślny Drawable . Ten obraz zostanie wyświetlony, jeśli ładowanie obrazu nie powiedzie się.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow