gpt4 book ai didi

android - 使用 Android Picasso 将图像预加载到内存/磁盘中

转载 作者:IT老高 更新时间:2023-10-28 23:18:20 26 4
gpt4 key购买 nike

我可以在显示之前使用 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();

这是我的 picasso 单例课

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

很遗憾,这不起作用。感谢您的建议!

最佳答案

正如 dnkoutso 所说,您只需使用:

获取()

picasso 内置!请点赞 dnkoutso 的评论。


PS 我假设您要问的是“我如何制作 Picasso PRE-LOAD 图像?”

请注意, picasso 绝对且完全完全处理图像的所有缓存 - 无需您进一步努力 - 这是 picasso 的目的以及您使用它的原因 - 这就是 picasso 存在的理由。所以你不必担心。

如果你说的是预加载或者我们说“热身”,那么就按照 dnkoutso 所说的去做。

(顺便说一句,所有这些都归结为:“在长长的 ListViews 图像中,东西看起来有多好”。我们实际上发现 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 处理而费心。简而言之,我们发现您很少需要担心“热身”。希望对您有所帮助。)

关于android - 使用 Android Picasso 将图像预加载到内存/磁盘中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com