Preload de imágenes en la memoria / disco con Android Picasso

¿Puedo descargar imágenes con Picasso antes de mostrarlas? Quiero almacenar en caché las imágenes primero.

Ejemplo de escenario: El usuario hace clic en el botón, ve la barra de progreso y cuando las imágenes han terminado de cargar el usuario ver las imágenes en la pantalla.

Traté de cargar imágenes con el método "get", pero que no almacenar en caché las imágenes.

Thread thread = new Thread() { @Override public void run() { try { Picasso picasso = PicassoOwnCache.with(getApplicationContext()); RequestCreator picassoRequest; for (String imgUrl : imagesUrls) { picassoRequest = picasso.load(imgUrl); picassoRequest.get(); } } catch (Exception e) { e.printStackTrace(); } } }; thread.start(); 

Esta es mi clase Picasso singleton

 public class PicassoOwnCache { static Picasso singleton = null; static Cache cache = null; public static Picasso with(int cacheSize, Context context) { if (singleton == null) { int maxSize = calculateMemoryCacheSize(context); cache = new LruCache(cacheSize <= maxSize ? cacheSize : maxSize); singleton = new Picasso.Builder(context) .memoryCache(cache) .build(); } return singleton; } public static Picasso with(Context context) { if (singleton == null) { cache = new LruCache(calculateMemoryCacheSize(context)); singleton = new Picasso.Builder(context) .memoryCache(cache) .build(); } return singleton; } static int calculateMemoryCacheSize(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); boolean largeHeap = (context.getApplicationInfo().flags & FLAG_LARGE_HEAP) != 0; int memoryClass = am.getMemoryClass(); if (largeHeap && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { memoryClass = ActivityManagerHoneycomb.getLargeMemoryClass(am); } return 1024 * 1024 * memoryClass / 10;//7; } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private static class ActivityManagerHoneycomb { static int getLargeMemoryClass(ActivityManager activityManager) { return activityManager.getLargeMemoryClass(); } } } 

Siguiente mostrar (en caché) la imagen para el usuario.

 Picasso picasso = PicassoOwnCache.with(getApplicationContext()); picasso.setDebugging(true) ; RequestCreator picassoRequest; picassoRequest = picasso.load(imgUrl); picassoRequest .placeholder(R.drawable.loading_logo) .error(R.drawable.no_internet) .fit() // I tries also without fit() .into(holder.getImageView()); 

Lamentablemente, esto no funciona. Gracias por las sugerencias yopur!

Como dnkoutso dice que usted acaba de usar:

ha podido recuperar()

¡Que está construido en Picasso! Por favor, el comentario de upvote dnkoutso.


PS Estoy asumiendo que lo que estás pidiendo es "¿Cómo puedo hacer imágenes de Picasso PRE-LOAD?"

Tenga en cuenta que Picasso maneja de forma absoluta y total toda el almacenamiento en caché de las imágenes -sin ningún esfuerzo adicional por parte de usted- que es el propósito de Picasso y por qué lo usa, esa es la razón de ser de Picasso . Así que no tienes que preocuparte por eso.

Una vez más si usted está hablando de pre-carga o vamos a decir "calentamiento" , a continuación, hacer exactamente lo que dnkoutso dijo.

(Por cierto, todo esto simplemente se reduce a: "cómo las cosas buenas se ven en el largo ListViews de imágenes" .Hemos encontrado realmente que Picasso es tan suave, que realmente ni siquiera tiene que preocuparse, por lo general, acerca de una fase de calentamiento en la mayoría de las aplicaciones. de hecho, incluso conceptos críticos como este ….

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

Nota – este famoso artículo http://www.programmingmobile.com/2012/03/buttery-smooth-list-scrolling-in.html ha desaparecido de la web.

… realmente Picasso es tan fácil de usar, que, realmente, rara vez tienen que preocuparse de "antigua" cuidadosamente el manejo de ListView. En resumen, muy rara vez se necesita preocuparse por "calentamiento", hemos encontrado. Espero eso ayude.)

Puede obtener imágenes antes de mostrar. Después de que se carga, puede cargar en imageView. Cuando llama a Picasso # load () por segunda vez, la imagen no se volverá a descargar. Vendrá de caché.

 startProgress(); // handle showing progress view somehow Picasso.with(getActivity()).load(imageUrl).fetch(new Callback() { @Override public void onSuccess() { Picasso.with(getActivity()).load(imageUrl).into(imgViewMedia); stopProgress(); // handle stopping progress view somehow } @Override public void onError() { } }); 
  • Cómo cargar diseño de fondo utilizando Picasso
  • Acercamiento a las imágenes de Android en DB
  • Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
  • Android: falla en la imagen de carga de Picasso. Cómo mostrar mensaje de error
  • Carga imágenes grandes con Picasso y objeto Transform personalizado
  • ¿Cómo evitar que Picasso recargue imágenes en RecyclerView?
  • Aplicación de Android se bloquea para algunos usuarios al aplicar la transformación con Picasso
  • Cambiar el tamaño de la imagen a todo el ancho y la altura variable con Picasso
  • Cultivo de Picasso a una vista
  • Picasso ejecutar primero no llamar onBitmapLoaded in for loop
  • OkHTTP y Picasso no funcionan juntos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.