Sök…


Introduktion

**** VARNING Denna dokumentation är ohållen och ofta felaktig ****

Glides officiella dokumentation är en mycket bättre källa:

För Glide v4, se http://bumptech.github.io/glide/ . För Glide v3, se https://github.com/bumptech/glide/wiki .

Anmärkningar

Glide är en snabb och effektiv mediehanterings- och bildhämtningsram för öppen källkod för Android som förpackar medieavkodning, minne- och diskcaching och resurspooling till ett enkelt och lättanvänt gränssnitt.

Glide stöder hämtning, avkodning och visning av stillbilder, bilder och animerade GIF-filer. Glide innehåller ett flexibelt API som gör det möjligt för utvecklare att ansluta till nästan alla nätverksstackar.
Som standard använder Glide en anpassad HttpUrlConnection- baserad stack, men inkluderar också verktygsbibliotek som ansluts till Googles Volley- projekt eller Square's OkHttp-bibliotek istället.

Glides huvudfokus är att göra rullning av alla typer av en lista med bilder så smidig och snabb som möjligt, men Glide är också effektivt för nästan alla fall där du behöver hämta, ändra storlek och visa en fjärrbild.

Källkod och ytterligare dokumentation finns på GitHub: https://github.com/bumptech/glide

Lägg till Glide i ditt projekt

Från den officiella dokumentationen :

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

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

Beroende på din ProGuard (DexGuard) konfigurering och användning kanske du också måste inkludera följande rader i din proguard.cfg (Se Glides wiki för mer information):

-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

Laddar en bild

Imageview

Så här laddar du en bild från en angiven URL, Uri, resurs-ID eller någon annan modell i en ImageView :

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

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

För Uris, byt yourUrl din yourUrl med din Uri ( content://media/external/images/1 ). För Drawables ersätter yourUrl med ditt resurs-id ( R.drawable.image ).

RecyclerView och ListView

I ListView eller RecyclerView kan du använda exakt samma rader:

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

Om du inte vill starta en belastning i onBindViewHolder , se till att du clear() någon ImageView Glide som hanterar innan du ändrar 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);
    }
}

Glidcirkeltransformation (Ladda bild i en cirkulär ImageView)

Skapa en cirkelbild med glid.

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

Användande:

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

Standardomvandlingar

Gliden inkluderar två standardtransformationer, fit center och center crop.

Fit center:

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

Fit center utför samma transformation som Android: s ScaleType.FIT_CENTER .

Mittgröda:

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

Centergrödan utför samma transformation som Android: s ScaleType.CENTER_CROP .

För mer information, se Glides wiki .

Glid avrundade hörnbild med anpassat glidmål

Gör först verktygsklass eller använd den här metoden i den klass som behövs

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

Laddar bild:

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

Eftersom du använder asBitmap () kommer animationerna att tas bort. Du kan använda din egen animering på det här stället med metoden animerad ().

Exempel med liknande bleknar in som standard Glide-animation.

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

Observera att denna animering är privatbibliotekets supportbibliotek - det rekommenderas inte att använda eftersom det kan ändras eller till och med tas bort.

Observera att du också måste ha supportbibliotek för att använda RoundedBitmapDrawableFactory

Förbelasta bilder

Så här läser du på förinstallerade fjärrbilder och ser till att bilden bara laddas ner en gång:

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

Sedan:

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

För att ladda in lokala bilder och se till att en transformerad kopia finns i skivcachen (och kanske minnescachen):

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

Sedan:

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

Platshållare och felhantering

Om du vill lägga till en Drawable visas under belastningen kan du lägga till en platshållare:

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

Om du vill att en Drawable ska visas om lasten misslyckas av någon anledning:

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

Om du vill att en Drawable ska visas om du tillhandahåller en nollmodell (URL, Uri, filväg osv):

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

Ladda bilden i en cirkulär ImageView utan anpassade transformationer

Skapa en anpassad BitmapImageViewTarget för att ladda bilden till:

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

Användande:

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

Hantering av glidbildbelastning misslyckades

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

Här på SET_YOUR_DEFAULT_IMAGE plats kan du ställa in någon standard Drawable . Denna bild kommer att visas om bildbelastning misslyckas.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow