Поиск…


Вступление

**** ПРЕДУПРЕЖДЕНИЕ Эта документация не поддерживается и часто неточна ****

Официальная документация Glide - гораздо лучший источник:

Для Glide v4 см. Http://bumptech.github.io/glide/ . Для Glide v3 см. Https://github.com/bumptech/glide/wiki .

замечания

Glide - это быстрый и эффективный механизм управления медиафайлами и изображений для Android с открытым исходным кодом, который включает в себя декодирование носителей, кеширование памяти и дисков, а также объединение ресурсов в простой и удобный интерфейс.

Glide поддерживает выборку, декодирование и отображение видеопотоков, изображений и анимированных GIF-файлов. Glide включает гибкий API, который позволяет разработчикам подключаться практически к любому сетевому стеклу.
По умолчанию Glide использует собственный стек, основанный на HttpUrlConnection , но также включает в себя библиотеки утилиты, подключаемые к проекту Volley Google или библиотеке OkHttp Square .

Основное внимание Glide уделяется тому, чтобы прокручивать любой вид списка изображений как можно более гладко и быстро, но Glide также эффективен практически для любого случая, когда вам нужно выбирать, изменять размер и отображать удаленное изображение.

Исходный код и дальнейшая документация доступны на GitHub: https://github.com/bumptech/glide

Добавьте 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'
}

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

В зависимости от конфигурации и использования 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, идентификатор ресурса или любую другую модель в 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 ). Для Drawables замените yourUrl вашим идентификатором ресурса ( 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 , убедитесь, что вы onBindViewHolder clear() любой ImageView Glide, который может управлять до изменения 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 включает в себя два преобразования по умолчанию, по центру и центру.

Подходящий центр:

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

Fit center выполняет те же преобразования, что и ScaleType Android. FIT_CENTER .

Центровая культура:

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

Центральная обрезка выполняет ту же трансформацию, что и Android ScaleType.CENTER_CROP .

Для получения дополнительной информации см. Wiki в Glide .

Изображение с закругленными углами с закругленными углами с пользовательской целью Glide

Сначала создайте класс утилиты или используйте этот метод в классе

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 по умолчанию.

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

Если вы хотите, чтобы Drawable отображался, если сбой по какой-либо причине:

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

Если вы хотите, чтобы Drawable отображался, если вы предоставили нулевую модель (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

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