Preload de imágenes múltiples con Glide
Estamos tratando de precargar las imágenes en la memoria caché para cargarlas más tarde (las imágenes se encuentran en la carpeta de recursos de la aplicación)
Lo que intentamos:
- ¿Las Transiciones de Actividad / Fragmento son compatibles con dispositivos pre-Lollipop?
- Android hamburguesa / flecha icono cambio dinámico color
- Convertir Uri a String y String a Uri
- Desplácese hasta la parte inferior de recyclerview con varios tipos de vista
- Eclipse se congela todo el tiempo con Ubuntu
Glide.with(this) .load(pictureUri) .diskCacheStrategy(DiskCacheStrategy.ALL); Glide.with(this) .load(picture_uri) .diskCacheStrategy(DiskCacheStrategy.ALL) .preload();
El problema: las imágenes se almacenan en caché sólo cuando estamos tratando de cargarlas / mostrarlas: Deben cargarse en memoria antes para que parezcan más rápidas.
Glide.with(this) .load(picture_uri) .into(imageView);
También intentamos usar un GlideModule para aumentar el tamaño de CacheMemory:
public class GlideModule implements com.bumptech.glide.module.GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder.setMemoryCache(new LruResourceCache(100000)); } @Override public void registerComponents(Context context, Glide glide) { } }
En el manifiesto:
<meta-data android:name=".GlideModule" android:value="GlideModule"/>
Nada está funcionando hasta ahora. ¿Alguna idea?
Estamos tratando de usar un invisible 1 dp imageView, pero el resultado es el mismo:
for(Drawing drawing: getDrawingsForTab(tab)){ Glide.with(this) .load(drawing.getImage().toUri()) .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(mPreloadCacheIv); for(Picture picture : getPictures()){ Glide.with(this) .load(picture.getPicture().toUri()) .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(mPreloadCacheIv); } }
- Permisos de tiempo de ejecución de Android: cómo implementar
- Cuánta de las principales API de Java están presentes en la API de Android
- Cómo alinear a la derecha PreferencesActivity en android?
- Creación de una imagen de fondo para la aplicación de Android - Java
- ¿Cómo puedo abrir el calendario desde mi aplicación?
- Determinar si el contexto es una actividad específica
- Equivalente de onActivityResult para el mortero y el flujo?
- ¿Distancia más corta de Levenshtein? ¿Lo necesito?
La mejor opción es manejar el almacenamiento en caché usted mismo, le da más control y debe ser fácil ya que ya sabe qué mapas de bits se van a cargar.
Primero: Configurar un LruCache
LruCache<String, Bitmap> memCache = new LruCache<>(size) { @Override protected int sizeOf(String key, Bitmap image) { return image.getByteCount()/1024; } };
Segundo: Cargue los mapas de bits en el LruCache
Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; //width of screen in pixels int height = size.y;//height of screen in pixels Glide.with(context) .load(Uri.parse("file:///android_asset/imagefile")) .asBitmap() .fitCenter() //fits given dimensions maintaining ratio .into(new SimpleTarget(width,height) { @Override public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { memCache.put("imagefile", resource); } });
Tercero: Utilice los mapas de bits almacenados en caché
Bitmap image = memCache.get("imagefile"); if (image != null) { //Bitmap exists in cache. imageView.setImageBitmap(image); } else { //Bitmap not found in cache reload it Glide.with(context) .load(Uri.parse("file:///android_asset/imagefile")) .into(imageView); }
Utilice el siguiente código para almacenar imágenes en caché sin mostrarlas
-
Utilizando el método
downloadOnly
si está buscando descargar imágenes desde la web y almacenarlas en el diskCache:FutureTarget<File> future = Glide.with(applicationContext) .load(yourUrl) .downloadOnly(500, 500);
-
Utilizando el método de
preload
si desea cargarlos en el caché de memoria.Glide.with(context) .load(url) .preload(500, 500);
Más adelante podrá utilizar las imágenes almacenadas en caché utilizando
Glide.with(yourFragment) .load(yourUrl) .into(yourView);
- ListView se desplaza hacia arriba cuando EditText crece
- Ningún recurso encontrado al usar el estilo Theme.Sherlock