我有点困惑:作为规则,当异步将图像加载到某种列表视图(无论是在Android还是iOS上,还是在另一个平台上的摘要中)时,你基本上必须这样做。
-- make a note of "which" cell this is (say, #213)
-- start getting the image from the net.
-- it has loaded from the net. What cell are we now?
-- if we are "still" 213, load the image to the image view!
-- if we are "no longer" 213, just forget about it.
这是延迟加载异步图像的基础。例如,Lucas Rocha在一篇着名的文章中完美地解释了它:
http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/
(向下滚动到“这里只是一个简单的草图,你可以做到这一点:”......)
现在好了,据我所知毕加索实际上已经完全自动为你做了这件事。
毕加索“知道”视图是否已经改变。如果视图发生了变化,毕加索知道不要加载它
我完全正确吗?这是毕加索的内置功能,我还需要做什么呢?
(旁边 - 我有点困惑“毕加索如何做到这一点;瞥了一眼我在毕加索看不到任何魔法代码,它记录了id,或者持有者的某些东西?查看? 。)
为了清楚起见,我正在以通常的方式使用Picasso,就像这样,基本上是在getView的末尾......
Picasso.
with(State.mainContext).
load(imageFile.getUrl()).
placeholder(R.drawable.default).
noFade().
into(v.hexaIV);
答案 0 :(得分:4)
Picasso
真是太美了。在getView()方法Picasso.with(c).load(url).into(img);
中只需要一行
他们是如何做到的,我不确定,但在Picasso
存在之前,我做了自己的图像加载器并且它并不那么困难。
假设您在图片加载器代码中的某处有Url和ImageView地图。
因此,只要代码将img
传递给它,它就会检查此映射,如果它已经使用基本Java img
加载了相同mImg.equals(img)
的其他URL,如果它匹配,它知道,即使你仍然会缓存该URL,它也不应该将Drawable传递给ImageView。
在一些罕见的情况下,您可能希望直接取消加载,在这些情况下,您可以致电Picasso.with(c).cancel(img);
,但这种情况很少见。