2015-07-03 67 views
2

我正在使用Picasso将图像加载到ListView单元格中,并且当前使用占位符图像。所以,当用户向下滚动时,ImageView中的占位符图像被替换为需要在那里的真实图像(来自URL)。然而,加载真实图像/替换占位符图像的过程不会发生,直到单元处于屏幕的视野中,这意味着用户不断看到占位符图像变为真实图像。有没有办法让这个过程在屏幕外完成,以便用户不会看到并获得更好的用户体验?在行可见之前让毕加索加载图像

+0

你需要找到一种方法来在列表视图中看到更多的视图 –

+0

你会怎么做呢?据我所知,ListView并不具备与ViewPager相同的功能,您可以在其中实际定义左右刷卡的离线视图数量。 –

+0

我认为这个问题的标题有点不准确。我在下面的答案解决了如何“让毕加索在行可见之前加载图像”,但看起来您真正想知道的是“如何在可见之前准备列表项视图”。我不知道ListView是否可能。您可能想要使用RecyclerView,而不是http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html – Kazuki

回答

2

您可以使用fetch()方法热身缓存

Picasso.with(context).load(urlToPrefetch).fetch(); 

注意,这恰恰是最努力的基础。根据您的配置,缓存可能会在您确实需要之前删除,即使存在磁盘缓存,Picasso也会显示占位符,直到它处理映像(尽管它必须比使用远程服务器加载映像时更快完成)。

+0

你有这样的例子。我目前正在使用这样的东西加载它:Picasso.with(parentFragment.getActivity()) .load(category.getCategoryIconUrl()) .placeholder(R.drawable.placeholder_icon) .into(viewHolder.categoryIcon); –

+0

但是您的示例不会a)指定占位符图像或b)将获取的图像加载到的图像视图。 –

+0

是的,所以这是“让毕加索在行之前加载图像可见”的答案。 您可以预先调用fetch()方法(例如,甚至在用户显示listview之前)。图像加载到缓存中,然后在适配器的onGetView方法中,您将调用相同的 Picasso.with(parentFragment.getActivity()).load(category.getCategoryIconUrl()).placeholder(R.drawable.placeholder_icon).into( viewHolder.categoryIcon); 然后,下载HTTP客户端不需要发出网络请求,而只需从缓存中读取,这样您就可以缩短显示占位符的时间 – Kazuki