最近我从iOS转换过来,我意识到要处理数百张大图片的快速滚动是相当费力的,实际上你需要使用Picasso(或者可能是Volley)。
现在有了RecyclerView - 是否有人使用RecyclerView实现了许多大图片的滚动?
如果有的话,是否仍需要像以前一样使用Picasso(即上周)?
对此有什么发现吗? 干杯
最近我从iOS转换过来,我意识到要处理数百张大图片的快速滚动是相当费力的,实际上你需要使用Picasso(或者可能是Volley)。
现在有了RecyclerView - 是否有人使用RecyclerView实现了许多大图片的滚动?
如果有的话,是否仍需要像以前一样使用Picasso(即上周)?
对此有什么发现吗? 干杯
RecyclerView
是AbsListView
类的改进版本,更具模块化和可扩展性。它提供了更好的API来回收视图,并提供了一种使用相同API创建各种列表视图的方法——垂直、水平、网格、错列网格等等。加载图片完全不属于此API的范畴。
因此,将图片加载到其中需要您做与以前完全相同的事情。例如,使用Picasso:
@Override
public void onBindViewHolder(final MyViewHolder myViewHolder, final int i) {
Picasso.withContext(mContext).load(myImageUrl).into(myViewHolder.imageView);
}
实际上,回到你的观点:
RecyclerView 是 Android 改进列表视图的方式,可以更加流畅地滚动大量大型图像列表。
如果你已经正确地使用了 ViewHolder
类和适当地重复使用了 convertView
,那么我极为怀疑性能会有所提高。而 RecyclerView
默认提供了这些优化,所以你不再需要自行处理。
ViewHolder
和重用convertView
提供的优化显著。毕竟,这是一个全新编写的类。 - nhaarman是的,正如之前的评论所提到的那样,它仍然是必需的,但这也有助于。
import android.support.v7.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.scrolling.PicassoFlingScrollListener;
/**
* Example Use:
* mRecyclerView.setOnScrollListener(new PicassoRecyclerViewScrollListener(mPicasso));
*
* @author Simon Lightfoot <simon@demondevelopers.com>
*
*/
public static class PicassoRecyclerViewScrollListener implements RecyclerView.OnScrollListener
{
private final PicassoFlingScrollListener mListener;
private final RecyclerView.OnScrollListener mDelegate;
public PicassoRecyclerViewScrollListener(Picasso picasso)
{
this(picasso, null);
}
public PicassoRecyclerViewScrollListener(Picasso picasso, RecyclerView.OnScrollListener delegate)
{
mListener = new PicassoFlingScrollListener(picasso);
mDelegate = delegate;
}
@Override
public void onScrollStateChanged(int newState)
{
mListener.onScrollStateChanged(null, newState);
if(mDelegate != null){
mDelegate.onScrollStateChanged(newState);
}
}
@Override
public void onScrolled(int dx, int dy)
{
if(mDelegate != null){
mDelegate.onScrolled(dx, dy);
}
}
}