Предварительная загрузка изображений в память / диск с помощью Android Picasso

Можно ли загружать изображения с помощью Picasso перед их отображением? Сначала я хочу кэшировать изображения.

Пример сценария: пользователь нажимает на кнопку, видит панель прогресса, и когда изображения закончат загрузку, пользователь видит изображения на экране.

Я попытался загрузить изображения с помощью метода «get», но не кэшировал изображения.

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

Это мой одиночный класс Пикассо

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

Следующее изображение (кэшированное) для пользователя.

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

К сожалению, это не работает. Спасибо за предложения yopur!

Как говорит dnkoutso, вы просто используете:

выборки ()

Который построен в Пикассо! Пожалуйста, пропустите комментарий dnkoutso.


PS Я предполагаю, что вы спрашиваете: «Как я могу сделать изображения Picasso PRE-LOAD?»

Обратите внимание, что Пикассо абсолютно и полностью полностью обрабатывает все кэширование изображений – без каких-либо дополнительных усилий от вас – это цель Пикассо и почему вы его используете – это смысл существования Пикассо . Поэтому вам не нужно беспокоиться об этом.

Опять же, если вы говорите о предварительной загрузке или скажете «разминка» , тогда сделайте то, что сказал dnkoutso.

(Кстати, все это просто сводится к: «как хорошие вещи выглядят в длинных списках изображений». Мы действительно обнаружили, что Picasso настолько плавный, вам даже не нужно беспокоиться, вообще говоря, о Фаза разминки в большинстве приложений. Действительно, даже критические концепции, подобные этому …

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

Примечание. Эта знаменитая статья http://www.programmingmobile.com/2012/03/buttery-smooth-list-scrolling-in.html исчезла из Интернета.

… действительно, Picasso настолько прост в использовании, вам, на самом деле, редко приходится беспокоиться о «старомодной» тщательной обработке ListView. Короче говоря, вам очень редко приходится беспокоиться о «разминке», мы нашли. Надеюсь, поможет.)

Вы можете получать изображения перед отображением. После загрузки вы можете загрузить изображение. Когда вы вызываете Picasso # load () во второй раз, изображение больше не будет загружено. Он будет поступать из кеша.

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