最近在iOS上移动,我意识到要处理100个大图像的快速滚动,
这是相当多的工作,在实践中你需要使用毕加索(或者可能是Volley)。
现在RecyclerView就在这里 - 有没有人使用RecyclerView 实现了许多大图像的滚动?
如果是这样,你是否必须像过去那样使用毕加索(即上周)
有关此的任何调查结果?干杯
答案 0 :(得分:24)
RecyclerView
只不过是AbsListView
类的改进,更加模块化和可扩展的版本。它为回收视图提供了更好的API,并提供了使用相同API创建各种列表视图的方法 - 垂直,水平,网格,交错网格等。加载图片并不是此API的全部内容。
因此,将图像加载到其中需要您完成与之前完全相同的操作。例如,使用毕加索:
@Override
public void onBindViewHolder(final MyViewHolder myViewHolder, final int i) {
Picasso.withContext(mContext).load(myImageUrl).into(myViewHolder.imageView);
}
事实上,回到你的观点:
RecyclerView是Android改进列表视图,因此我们可以更平滑地滚动大型图像列表
如果您已经以正确的方式实施ListAdapter
,我非常怀疑性能会提高:使用ViewHolder
类,并正确重用convertView
。 RecyclerView
默认发布这些优化,因此您不再需要这样做。
答案 1 :(得分:0)
是的,仍然需要像以前的评论所提到的那样,但这也有帮助。
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);
}
}
}