【问题标题】:How to save images with Picasso so there is no loading time?如何用毕加索保存图像,这样就没有加载时间?
【发布时间】:2020-02-09 17:51:23
【问题描述】:

我有一个应用程序,我在其中显示报价,并且背景中有一张图片。当我单击“下一步”按钮时,将显示下一个报价并加载新图像。加载大约需要 0.5 秒,并且之前的图像作为占位符。但是当我切换回来时,没有加载时间。

这意味着,图像保存在某个地方,因此不需要再次加载。不幸的是,这只是暂时的。当我看到接下来的 5 张图片并返回第一张时,需要再次加载第一张图片。所以一开始我尝试加载所有图片(只有25张图片),像这样:

Picasso.get().load(backgrounds.get(1));
Picasso.get().load(backgrounds.get(2));
Picasso.get().load(backgrounds.get(3));
Picasso.get().load(backgrounds.get(4));
Picasso.get().load(backgrounds.get(5));
Picasso.get().load(backgrounds.get(6));
Picasso.get().load(backgrounds.get(7));

当我点击“下一步”按钮时,我会使用这个:

Picasso.get().load(backgrounds.get(counterBackground)).fit().noPlaceholder().into(background);

但是这两件事都没有预期的效果。图像每次都需要大约 0.5 的加载时间,并且“noPlaceholder”不能像预期的那样工作,占位符仍然存在。

那么,有人知道如何缩短加载时间吗?比如,如何在开始时加载所有图像?

感谢您的每一个回答!

【问题讨论】:

    标签: java android performance picasso


    【解决方案1】:

    您可以在使用 Picasso 时创建缓存,这将导致更快的加载时间(只要图像被缓存

    Picasso picasso =  new Picasso.Builder(this).downloader(new OkHttpDownloader(getCacheDir(), 250000000)).build();
    Picasso.setSingletonInstance(picasso);
    

    source

    你可以使用指示器来查看图片是从哪里加载的

    setIndicatorsEnabled(true)
    

    source

    您还可以使用回调来指示图像何时完成加载

    您可以查看更多详情here

    编辑

    1. 您可以使用 Picasso.get().load(R.drawable.pic).into(imageview) 我认为它也适用于 mipmap,通常 mipmap 用于您的资源的错误/占位符(如果您不使用可绘制对象)

    2. 2.

    您可以创建自己的关于如何缓存/加载图像的策略

    Link

    【讨论】:

    • 谢谢!你能评论你的代码吗?比如,CacheDir 后面的“250000000”是什么意思?
    • 您可以在我提供的链接中看到。这基本上意味着您分配 250mb 用于缓存
    • 我检查了你的链接和你的答案。不幸的是,我不知道如何处理本地文件。我的图像都在我的项目中。你能帮我解决这个问题吗?
    • 你是指本地文件还是资源?我从没试过用毕加索加载资源
    • 资源化,保存在mipmap文件夹中
    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2021-08-09
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多