Glide-4.0.0 Falta el marcador de posición, error, GlideApp y no resuelve su marcador de posición de método, error


84

Quiero usar la biblioteca de Android Glide para descargar una imagen y mostrarla ImageView.

En la versión anterior usamos:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

Pero he visto la documentación de Glide:

dice usar GlideApp.with()en su lugarGlide.with()

Mi preocupación es un marcador de posición que falta, un error, GlideApp y otras opciones.

estoy usando

 compile 'com.github.bumptech.glide:glide:4.0.0'

¿Dónde estoy haciendo mal? Con referencia a aquí .

¿Cómo se GlideApp.with()ha utilizado?

La API se genera en el mismo paquete que AppGlideModuley se denomina GlideAppde forma predeterminada. Las aplicaciones pueden usar la API iniciando todas las cargas con en GlideApp.with()lugar de Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);


2
¿Tienes idea sobre GlideApp? ¿Cómo se usa y cuándo se usa? .. si no, por favor vota a favor
Ritesh Bhavsar

te falta el paso 2, comprueba esto: bumptech.github.io/glide/doc/generatedapi.html
Oussema Aroua

Siga esta documentación bumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Rohan Pawar

Respuestas:


222

Intente usar RequestOptions :

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

EDITAR

Si .setDefaultRequestOptions(requestOptions)no funciona, use .apply(requestOptions):

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

EDITAR 2 Bono

Aquí hay algunos otros cambios en Glide-4


que tampoco sé que @RiteshBhavsar está funcionando en mi dispositivo con la nueva
biblioteca

@NileshRathod RequestOptions deben usarse en estilo constructor: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Alexander Ukhov

1
Esta es una solución alternativa sin GlideApp. Consulte github.com/bumptech/glide/issues/1945 para saber cómo agregar GlideApp.
CoolMind

¿Hay alguna forma de obtener una salida de mapa de bits como esa mapa de bits de mapa de bits = salida de deslizamiento?
Vipul Chauhan

30

Si usa las dependencias del paquete Glide compile 'com.github.bumptech.glide:glide:3.7.0', entonces debe usar el siguiente código:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

Nota: como en la documentación ,

Imágenes redondas: se sabe que CircleImageView / CircularImageView / RoundedImageView tienen problemas con TransitionDrawable (.crossFade () con .thumbnail () o .placeholder ()) y GIF animados, use BitmapTransformation (.circleCrop () estará disponible en v4) o .dontAnimate () para solucionar el problema.

La última versión actualizada que compile com.github.bumptech.glide:glide:4.1.1debe usar debe ser usar el siguiente código:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

Vea la última versión de deslizamiento, corrección de errores y funciones .


glide es una biblioteca tan extraña de usar que no se han actualizado en github
Anand Savjani

Ya @AnandSavjani, no se actualizaron en GitHub, pero puede encontrar sus actualizaciones en este enlace github.com/bumptech/glide/releases
ND1010_

1
Si no le gusta el deslizamiento, puede crear su propia forma de cargar imágenes, gif que también proporcionan almacenamiento en caché y puede cargarlo libremente en github y hacerlo siempre actualizado
ND1010_

10

Si desea utilizar GlideApp, debe agregarlo al dependenciesprocesador de anotaciones como en la captura de pantalla:

Cómo agregar GlideApp a su proyecto

Luego, incluya una implementación de AppGlideModule en su aplicación:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

No te olvides de la @GlideModuleanotación. Entonces necesitas construir el proyecto. Y GlideAppse generará automáticamente.


1
No funcionaba después de sincronizar Gradle. Pero tenemos que reconstruir para que funcione.
Ravi Yadav

6

Dependencias:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

Agregue una implementación de AppGlideModule debidamente anotada:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

Además, si ha utilizado la opción jack, para evitar los siguientes errores similares, debe utilizar la vista previa de Android Studio 3.0.0.

Error: la ejecución falló para la tarea ': app: transformJackWithJackForDebug'. com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: Aún no implementado


6

No tenemos necesidad de usar RequestOptions también.

La API generada agrega una clase GlideApp, que proporciona acceso a las subclases RequestBuilder y RequestOptions. La subclase RequestOptions contiene todos los métodos en RequestOptions y cualquier método definido en GlideExtensions. La subclase RequestBuilder proporciona acceso a todos los métodos en la subclase RequestOptions generada sin tener que usar apply:

Usar Glide : -

Una solicitud sin la API generada podría verse así:

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

Usando GlideApp : -

Con la API generada, las RequestOptionsllamadas se pueden insertar:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

Aún puede usar la subclase RequestOptions generada para aplicar el mismo conjunto de opciones a múltiples cargas, pero la subclase RequestBuilder generada puede ser más conveniente en la mayoría de los casos.


4

Trabajando

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)

2

Si desea utilizar un marcador de posición común en todas partes de su aplicación, puede hacerlo de esta manera:

Como estamos creando GlideModule desde Glide v4 , puede copiar / pegar esta clase en su proyecto para que pueda usar la clase GlideApp (para más pasos, siga esto) :

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

Puede dar todas las opciones de solicitud aquí para establecerlas como predeterminadas .

Mediante la creación de esta clase que no es necesario utilizar .placeholdercon GlideApp, que se aplicará automáticamente.


1
RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);

1
Agregue alguna explicación: un bloque de código simple por sí solo no es tan informativo
CertainPerformance
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.